|Here at Atlassian we have just finished up our sixth
edition of “ShipIt Day”.
What is it?
|For those who don’t know, “ShipIt Day” is Atlassian’s irregular answer to Google 20% time: time set aside for
developers to work on whatever they want with a skew towards our products.
We tend to run “ShipIt” with a fairly open format you can do whatever you want as long as you can somehow relate it to our products. We have expanded it such that we set aside 1 1/2 days for the developers to complete their ideas. We start after lunch on a Thursday and work until 4pm Friday when we present what we have to everyone.
The goals of “ShipIt” are:
- Foster creativity. Atlassian is good at hiring smart people and we’d be mad to keep all that brain-power locked up.
- Scratch itches. Every developer has something that bugs them about our products, or something they’d like to see them do.
- Spike. Often, radical ideas don’t get traction because we don’t understand how they’d work or what benefit they’d provide.
- Have fun. Institutions like ShipIt make Atlassian a fun place to work.
Being the competitive individuals we are we also have a trophy plus bragging rights for the winner.
We are always growing here at Atlassian, this time around we had 32 separate projects compared with 12 from our first Fedex. Here are the highlights of what happened:
First Prize – JIRA Caller ID
Caller ID developed by Adrian Hempel set out to use Caller ID information from an
Asterisk based phone system to automatically retrieve
the caller’s information in JIRA. It
turned out great, even including a call history embedded in
JIRA where you could replay recorded
Second Prize – Atlasbook
Second prize went to Atlassian founder Mike
Cannon Brookes with his “evil-twisted-modification of Facebook for Atlassian’s developers”, Atlasbook.
What it does is aggregate action data from various different external servers and display a single
What is more impressive is that “Cannon” wrote about 40 screens and did the whole thing in Groovy + Grails
all in the ShipIt timeframe.
Thrid Prize – Calling Bamboo
Samuel Le Berrigaud made Bamboo build
status information available over the phone. Using
VXML or VoiceXML he added voice recognition so
that one could say which project they would like to know the status of. The plugin would then read the
builds status through the phone.
Being a phone based plugin there is not much in the way of screenshots to show, but take my word for it, the
demo was very cool.
Andreas Knecht decided it would be good to monitor real-time what happens in any given
JIRA instance. This includes any issue
events (creation, comments, etc) that are taking place, as well as more detailed profiling information to
identify slow sub-systems in JIRA. He
did this using Spring JMX and the JManage console.
Visualizing JIRA Workflows
For a while now Anton Mazkovoi has been attempting to use various tools to create a graphical (flowchart
like) view of a JIRA Workflow.
Workflows can get quite complicated in
JIRA, and with a non-graphical
representation of a workflow it is a bit confusing to see how an issue can move through the workflow.
He finally stumbled upon Drag Node
Chart from FusionCharts and came up with a
pretty nice looking graph. The graphing tool is proprietary and we are looking into getting something like
this into JIRA.
Add Users from URL for JIRA
Dushan Hanuska modified JIRA to allow
it to import users by reading microformatted user
information from a given URL. If you want to quickly import a set of users into
JIRA and you have their information
already available with microformatted markup then this could be a huge time saver.
AJAX diffing saved
filter portlet + Side dashboard
At Atlassian we use JIRA for many
things, one of them is doing support. Dylan Etkin was bothered that he constantly had to refresh his
dashboard to see if there are any new issues “in-the-box” and he wanted to do support while keeping an eye
on the “inbox”.
He created an AJAX updated version of the saved filter portlet which also shows a color-coded diff of the
found results for each refresh. He then created a “right-hand” nav style view of the dashboard so you can
work and keep a eye on your portlets. This should hopefully find its way into the
Long Running Tasks in JIRA
Brad Baker tackled the fact that long running tasks in
JIRA, such a migrating issues in
workflows, do not display anything in the browser to indicate progress until the operation completes.
He provided a bit of page to show tasks logs but then decided that a fully fledged Video Poker game in
Staff Directory using Simile
This was the inaugural entry from the Internal Systems team, being Ernest Wong and John Rotenstein.
They used MIT Simile Exhibit technology to revamp
our staff contact list which is kept in
Confluence. They made the list
searchable, pretty, they included a timeline for employees start dates and a Google map view of where each
employee was from. It looked amazing.
Copy Space Plugin Published
Don Willis spent ShipIt finishing and publishing his project from last ShipIt. The Copy Space Plugin copies an
entire Confluence Space including
its pages within a single
Confluence instance. Sounds
simple but Confluence doesn’t let
you do it out of the box.
This is now available in confluence plugin repository.
Return to Castle Confluence
Our ShipIt V winner Nick Menere and Matt Jensen had a very ambitious plan in mind. This involved using the
Confluence Remote API to analyze
a Confluence instance to generate
a series of rooms to give the user a fully immersive 3D interface to
What they ended up with was a single room,
Confluence on the wall and an
image download process collecting images from the
Confluence dashboard history.
There was some fun stuff added (a Tin Soldier, a V-can rocket launcher, and the pictured V-storm), as a
“cheap effort to win more votes”.
Per Fragemann ventured out to implement a simple AspectJ-based profiler for
Confluence, which displays its
results in a ordered table list through a configurable Macro.
As shown his venture was a success.
Soren Harner and Brett Jackson set out to create a
like capability for Confluence.
There approach was base ranking top ROX pages based on a
social network analysis. As happens
sometimes on ShipIt the project did not yield any demo-able results, but they are armed for next time.
One-Click Blog Publishing
Don Brown as fully described
bridged the gap between
Confluence blogging and blogging
in Moveable Type.
In his demo he published his developer blog from a local instance of
Confluence running his plugin, it
was quite impressive.
Visualisation for Bamboo Builds
Brendan Humphreys wanted to implement a visualisation of build results as they came from his teams
Bamboo server – something he could
have running on a spare display for the team area. He also wanted a project that would give him an excuse to
learn Quartz Composer.
Overall he was pleased to get something working, but pretty disappointed with the general appearance of his
screensaver. He’d have preferred spending more time polishing the look and feel of the composition rather
than grappling with subtle timing issues and 3D transformations.
Justin Koke, a Crowd developer, decided
to add something he really was missing in his product, placing auditing into
Crowd. He introduced a plugin point to
Crowd, similar to
Confluence around Event
Listeners, so now you can drop in a JAR file that has your defined listeners for given events.
The ground work has been laid, the next step will be some ‘portlet’ style graphs for the
FishEye TreeMap Visualization
Conor MacNeill wanted to add treemap visualizations to
He used the jtreemap library available on
An image map was generated to allow the user to navigate into the tree. The image map was constructed so that
any click would take the user down one level in the tree but rendered tooltips related to 2 levels down in
the treemap. This allowed users to hover over a hot spot within a container to find out what it may be. Leaf
nodes would take the user back into FishEye’s traditional browse mode.
Fisheye Plugin for Eclipse
Michael Studman chose to write the beginnings of a plugin for
Eclipse that would provide access to some rudimentary
features of FishEye. He wanted to
achieve this through integration with the widely used CVS/SVN plugins shipped by Eclipse and others.
All features, besides CVS integration, were implemented. With just a few configuration settings users can now
view basic FishEye information for
their SVN project files and folders.
We are looking at about 3 or 4 days of polishing to wipe out the NPEs and rough edges before we try to get
this into the hands of our customers.
Realtime Code Coverage Viewer
Nick Pellow created a real time viewer of code coverage metrics. The idea behind this, apart from giving you
something interesting to look at while your tests run, was to also reveal tests which take a long time to
run but don’t do much for your overall code coverage.
Some problems were encountered and in the end it was no longer a real-time viewer, however it was displaying
Code Coverage versus Time, and as Nick says, “admittedly I was trying to grab some cheap ShipIt votes from
people impressed by an animated line crawling up the screen”.
Cross Product Projects
Chris Mountford added an extension to the cross-product plugin system to enable plugin developers to use a
wide range of scripting languages to develop bona fide plugins for Atlassian products. He
implemented one scripting bridge as a ModuleFactory, namely BsfModuleFactory. It integrates with
Apache BSF (Bean Scripting Framework) which is a
common abstraction over a number of scripting languages.
Picture Uploader Web Component
Edwin Wong figured it would be great if users of
Atlassian products could preview, crop, and resize
their pictures before they are uploaded.
The new picture uploader ended up as a basic two step wizard. Upload the picture, then you can crop a
section of the picture, the user can use a draggable, resizable box to make their selection on the image
that they just uploaded. This is done using YUI
and Java AWT package’s Graphics2D object which does the real work on the server.
The next step after adding resize, of course, is to incorporate the uploader into
JIRA, and even
If you made it this far, I have to say you are a real Champ.
It feels like every “ShipIt” day everyone really kicks it up a notch and we here at Atlassian can’t wait until the