ARTICLE

Hacking On Accomplishments

by | Mon 23 Jan 2012

A little while back I [blogged about](https://archivedblog.jonobacon.com/2011/10/25/ubuntu-accomplishments-system-spec/) an accomplishments system that [Stuart Langridge](https://www.kryogeniz.org) and I designed when he came to visit a while back. The idea was simple: a de-centralized system in which we can easily define different types of accomplishments (e.g. filing a bug, submitting a patch, getting a patch sponsored, translating a string) and a means in which users can be rewarded trophies for these accomplishments as well as discovering new accomplishments and how they can be achieved.

The nice thing about the system we designed is that it is de-centralized, it uses Ubuntu One as a transport mechanism (which means we don’t have to build our own transport system and your trophies are visible across all your Ubuntu machines), and the system has a verification process to ensure that people can’t fake their community accomplishments.

I wrote this all up into a spec which you can find [here](https://wiki.ubuntu.com/AccomplishmentsSpec).

We had an interesting session about this topic at UDS and Stuart put together a draft implementation which is at `lp:~sil/+junk/libaccom-draft/`. The implementation defines a set of sample accomplishments and provides a daemon that runs to maintain state on which accomplishments have been achieved and which are still yet to be completed. The system is neatly integrated into Ubuntu and accomplishments are displayed in a notify-osd bubble:

Stuart also wrote a small API (`libaccomplishment`) that client apps can use to query the system and present trophies achieved or those yet to be achieved. You can read more about this draft implementation [here](https://wiki.ubuntu.com/AccomplishmentsSpec#Draft_Implementation).

In the original spec there are two clients that would be in the system. A lens:

…and a helper app that is loaded when you click on a trophy in the lens which can provide more information about an accomplishment as well as showing the list of achieved accomplishments and those yet to achieve:

This weekend I decided to start writing this helper app (Michael Hall has expressed an interest in writing the lens). To get things rolling I wanted to display the list of trophies that have been accomplished. It looks like this so far:

This app is using the `libaccomplishment` API that Stuart provided in his draft implementation and this code could obviously used to develop the lens. There is obviously still lots to build into the app, but it provides a useful proof-of-concept for how it could work. This is a Quickly project and you can grab the code from `lp:~jonobacon/junk/trophyinfo`.

If you want to play with this, grab Stuart’s draft implementation (`lp:~sil/+junk/libaccom-draft/`) and run `examples/demo.sh` – this will start the daemon. You can then grab my branch (`lp:~jonobacon/junk/trophyinfo`) and run `quickly run` and see the trophies in the view.

Everything so far has been something of a proof of concept, but I wanted to see if anyone else was interested in participating. There are a number of things that we need to do:

* Stuart’s draft implementation needs extending, and he would like to find a new owner for it. Currently the API is simple but might need fleshing out further.
* The helper app here that I created a first cut of needs expanding and functionality added. We need to provide different ways of filtering the trophies, providing information about a specific trophy and how to achieve it, and the other features outlined in the [spec](https://wiki.ubuntu.com/AccomplishmentsSpec).
* Each accomplishment has a script that is run to see if you achieved something (e.g. if you filed a bug in Launchpad). In the spec, when one of these scripts returns that you accomplished the task, it creates a trophy, and syncs it via Ubuntu One to a validation server which runs the same script to verify you really did achieve the accomplishment. This then signs the trophy which then syncs back to your machine. We need someone to build this verification service.
* We need to evaluate and extend the .accomplishment format to include documentation for how to achieve a trophy. I know Jim Campbell expressed an interest in working on this and I would love to encourage others to participate too.
* We need to create a library of Ubuntu Community accomplishments. Stuart’s draft implementation includes an example script for filing a bug. See the [list of ideas](https://wiki.ubuntu.com/Accomplishments/Trophies) that Daniel has been working on.

Anyone interested in taking part?

### UPDATE

Since I posted this I have made a bunch of improvements to the helper app. This includes:

* The app now displays trophies achieved on the My Trophies page and those not yet achieved on the Opportunities page.
* Locked trophies (i.e. those that need another trophy to be accomplished before it can be) now use a different icon (we will need new icons for all of these, so I am using stock icons right now).
* Trophy/opportunities status is now updated with each page load which means that trophies are updated more dynamically.
* Double-clicking an opportunities will take you to the WebKit page to display info about it. I just need to update the .accomplishment scheme to provide more useful info.

I pushed all these updated to `lp:~jonobacon/junk/trophyinfo` if you want to play with it. 🙂

An invitation-only accelerator that develops industry-leading community engagement and growth via personalized training, coaching, and accountability...all tailored to your company's needs.

Want to read some more?

Happy Holidays

Happy Holidays

Just a quick note to wish all of you a happy, restful, and peaceful holidays, however and whoever you spend it with. Take care, folks, and I look forward to seeing you in 2015!

The Impact of One Person

The Impact of One Person

I am 35 years old and *people* never cease to surprise me. My trip home from Los Angeles today was a good example of this. It was a tortuous affair that should have been a quick hop from LA to Oakland, popping on BArt, and then getting home for a cup of tea and an...

Feedback Requested: Great Examples of Community

Feedback Requested: Great Examples of Community

Folks, I need to ask for some help. Like many, I have some go-to examples of great communities. This includes Wikipedia, OpenStreetmap, Ubuntu, Debian, Linux, and others. Many of these are software related, many of them are Open Source. I would like to ask your...

Ubuntu Governance Reboot: Five Proposals

Ubuntu Governance Reboot: Five Proposals

Sorry, this is *long*, but hang in there. A little while back I wrote [a blog post](https://archivedblog.jonobacon.com/2014/11/14/ubuntu-governance-reboot/) that seemed to inspire some people and ruffle the feathers of some others. It was designed as a...

Ubuntu Governance: Reboot?

Ubuntu Governance: Reboot?

For many years Ubuntu has had a comprehensive governance structure. At the top of the tree are the Community Council (community policy) and the Technical Board (technical policy). Below those boards are sub-councils such as the IRC, Forum, and LoCo councils, and...

Dealing With Disrespect: The Video

Dealing With Disrespect: The Video

A while back I wrote and released a free e-book called [Dealing With Disrespect](https://www.dealingwithdisrespect.com/). It is a book that provides a short, simple to read, free guide for handling personalized, mean-spirited, disrespectful, and in some cases,...