Hacking On Accomplishments

A little while back I blogged about an accomplishments system that Stuart Langridge 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.

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.

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.
  • 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 that Daniel has been working on.

Anyone interested in taking part?


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. :-)

  • Juancarlospaco

    Its #Gamification on Ubuntu!, very cool!

  • Martin Owens

    We’ll need XP with levels and some kind of interesting title system. Trophies should be categorised into a useful ontology and reflected through the lens.

    Or at least that’s how gamification works…

  • http://www.facebook.com/dave.nicholas2 Dave Nicholas

    [Achievement Unlocked] great idea…..

  • Emiel Kollof

    There should also be achievements that encourage people to explore the system, like opening a shell, executing certain commands, changing system settings, installing new software, updating for the first time. Of course these need to be able to be turned off for experienced users. Maybe it could be a dialog that pops up at first login?

  • Gerv

    You should connect with the Mozilla open badges project: https://wiki.mozilla.org/Badges .

  • Anonymous

    “Acheivement Unlocked: Installed Emacs” is a must.

  • Anonymous

    Will “seeding Ubuntu images with peer-to-peer” be an achievement?

  • Yves

    Please don’t gamify Ubuntu ! Trophies mean a competition or a race, remember “5 a day” ! You don’t want that ! You want to build a warm fuzzy feeling inside oneself, to provide a sense of being part of something bigger than oneself, to feel that something is being built, to contribute… not another game! Call it a brick, a pebble, or something but not a trophy… My two cents

  • PatrickDickey

    For the locked/unlocked trophies, you should have a little padlock that’s closed until they get the pre-requisites for the trophy. Then have it changed to an unlocked padlock.

    Also if this is going to become something that’s enabled by default, then you need to consider what the trophies are for (or allow the user to select what they want to receive trophies for).  Simply because while a brand new user might like getting a trophy for installing an application, someone who’s been using Ubuntu (or Linux in general) probably won’t want those.

    Have  a great day:)Patrick.

  • http://profiles.google.com/travisman1994 travis hoeffel

    Now if only you would make something like this for desura considering it just went open source.

  • Ngô Chin

    OMG, I was thinking about a similar systrem a while ago. But my system tries to make things look more the personal assistant paper clip in MS Word where all apps should have a guide (help) mode with context popup balloons showing people how to do things step by step. I really don’t know how to start as I have literally no programming skill. So I hope this idea could extent yours further. 😀