Ubuntu 12.04: Parentally Precise
I have rather nice little story to share with you all.
My mother in law, Sue, has what can be best described as a *dog-earred mess of a laptop*. A reasonably modern Lenovo Thinkpad with Windows Vista, it was painfully slow to use, crammed with all manner of bloatware and pre-installed rubbish that came with the machine and the applications she installed, and likely hiding some spyware, viruses and other uglyness.
Now, I am not a fan of Windows at the best of times, but this was beyond software preferences: the machine was barely usable. Sue though, being the trooper she is, gritted her teeth and just got on with it, going about her business as usual.
Recently here in the USA it was Mothers Day and I had an interesting idea. We had an old Dell Inspiron that has been kicking around for the last four years or so, and I decided to install [Ubuntu 12.04](https://www.ubuntu.com/ubuntu/features) on there for her as a surprise.
So, I downloaded the ISO, put it on a USB stick and the installation went flawlessly. Ubuntu 12.04 detected all of the hardware perfectly, and I rebooted. I was a little curious to see how Unity was going to fare on a machine that to my knowledge is at least four years old, possibly five or six years old, and it was slick and fast. Now, I am not being generous here…the performance is genuinely snappy; I was really quite impressed. Nice work, Unity team. π
On mothers day I met up with Sue and her husband and my brother in law (Erica was out of the country) and I gave her the laptop. Naturally, she was overjoyed, but whereas I planned on sitting down with her after dinner to show her how Ubuntu works, we ultimately didn’t get a chance to and she took the machine home with her. As such, all I did was tell her the password for logging in and then she was pretty much on her own with the option of calling me if she got stuck.
Now, Sue is very much a computer novice. She has no outside interest in computers…for her it is a tool, pure and simple. I was a little nervous how she would get on.
A few days later I heard back from her and she was absolutely *overjoyed*. She was browsing around the machine, installing software, accessing websites in Firefox, creating and saving documents in Libreoffice, and the last I heard from a few hours ago…signing up to [Ubuntu One](https://one.ubuntu.com) so she can ensure her files are backed up to the cloud.
As just one cog in this Ubuntu and wider Open Source and Free Software machine, I am really proud that we as a community could deliver this experience to her. I am confident that a few years back the experience would not have been so smooth and consistant, and it is fantastic to see Free Software thrilling regular people who just want get things done with their computers, safely and enjoyably. Thanks to everyone who contribute to make this little success story happen. π
Heading Towards 0.2
Eagle eyed readers may have noticed I have been talking a lot about [Ubuntu Accomplishments](https://wiki.ubuntu.com/Accomplishments) in the last few weeks…more so than usual… Well, to put it bluntly, my wife has been out of town for a few weeks and as such my evenings have had my husband time replaced with sitting in a darkened room, surrounded by empty Lean Cuisine trays, sipping on coffee, hacking to the sound-track of [Gov’t Mule](https://www.mule.net/home.php). If I had more hair, I really would feel like was 18 again. π
Anyway, enough of the goings on at Castle Bacon, so what is the latest in the *Ubuntu Accomplishments* camp? Well, I have some fun things to share…
## 0.2. Like 0.1 But Twice As Awesome
We are now officially on the road to 0.2. We have decided to codename our releases after notable accomplishments in history, so the next release will be codenamed *lightbulb* and has a release date set for **Tues 12th June 2012**. You can see our targeted bugs lists ([daemon](https://launchpad.net/ubuntu-accomplishments-daemon/+milestone/0.2) : [viewer](https://launchpad.net/ubuntu-accomplishments-viewer/+milestone/0.2)) to get a feel for what we have yet to do.
While on the covers 0.2 might seem a small and incremental release, there has been a lot going on as we work to bring quality and precision to the code and the user experience.
## A New API
The 0.1 release was an important milestone for us. With over **230** people testing it and over **900** trophies issued, we were shocked pleased to see a surprisingly low number of bug reports coming in.
0.1 also helped us to identify the deficiencies in our current API, so we planned on maturing it significantly for 0.2. *Rafal Cieslak* did a stunning job implementing this work and the API is not only more mature and more consistant, but faster and better testable.
## Categories and Sub-Categories
As our accomplishments collection has started grow, it has been clear that we needed two features that were not in 0.1:
* Accomplishments should be able to appear in multiple categories (e.g *Set Up Your SSH key* should appear in both *Development* and *Launchpad* categories).
* Some (but not all) categories are too big and general and could benefit from sub-categories (e.g. *Games* could be divided into different genres or specific games).
To focus on this work I put together a mock-up and explored some different ideas of exposing this cleanly. This was the final design:
Over the weekend Rafal and I tag-teamed this one; *Rafal* built the support into the API and I built the front-end support for this in the client. It now looks like this:
In this screenshot none of the sub-categories are selected, so all Launchpad accomplishments are displayed. If you click one of the sub-categories it only shows those opportunities. This still needs some visual tweaks and polish, but it works quite nicely.
## Multiple Dependencies
Another lesson from 0.1 was that while most accomplishments only need one other opportunity completing first before it can be unlocked, some need more than one. As an example, *On Planet Ubuntu* requires you to have a SSH key and be an Ubuntu Member. As such, we built in support for multiple dependencies.
Now the client show which dependencies you have yet to accomplish before the opportunity is unlocked:
## Credit Where Credit Is Due
Ubuntu Accomplishments is a fairly big vision with lots of moving parts that will involve lots of contibutors. While a few of us hack on the core system, the real value in the system are the hundreds of accomplishments that could be exposed via it. These different accomplishments are available in grouped *Collections* and we expect many different people to contribute to different collections (e.g. the *Ubuntu Community Accomplishments* collection).
As such, we wanted to be able to expose these contributions to our clients. To do this we built support into the API for an `author` field in each accomplisment, and clients can now display this in their help dialog box. Here is the official client showing off the credits:
The default behavior is that it will show the contributors for each collection you have installed as well as the core system.
## New Accomplishments
One of the most pleasant outcomes of 0.1 was getting many different accomplishment contributions from the community. In total we have added the following to the *Ubuntu Community Accomplishments* collection:
* Accomplishments Contributor
* Attend LoCo Team Event
* Bug Squad Member
* Ubuntu Forums Council Member
* Ubuntu Forums Staff Member
* Imported an SSH Key
* Ubuntu Beginners Team Council Member
* Ubuntu Beginners Team Member
* Bug Control Member
* Ubuntu Forums Ubuntu Member
* Blog on Planet Ubuntu
* Ubuntu Cloak
* Signed Canonical Contributor Agreement
* Uploaded First Branch To Launchpad
Thanks to *Silver Fox, Michael Hall, Matt Fischer, Rafal Cieslek, Angelo Compagnucci*, and *JosΓ© Antonio Rey* for these contributions!
**Would you like to contribute an accomplishment? See the [list of ideas](https://wiki.ubuntu.com/Accomplishments/AccomplishmentIdeas) and [get started](https://wiki.ubuntu.com/Accomplishments/Creating)!**
## Ubuntu Desktop Accomplishments
Do you know what is exciting about the following screenshot?
We fixed local accomplishments support in 0.2 (these are accomplishments on your computer such as sending your first email or installing your first application). We will be building out our own desktop collection and the above screenshot shows the very first accomplishment that is in the new [Ubuntu Desktop Accomplishments](https://launchpad.net/ubuntu-desktop-accomplishments) collection. This is still very much early days, but I am particularly looking forward to building this collection out: I want it to become one of the best ways of learning the many different things you can do on your computer in Ubuntu.
**UPDATE:** After I posted this I added support for local accomplishments to the *Accomplishment Information* app itself. See a short video demo below:
*Can’t see the video? [Click here](https://youtu.be/GDxpqX4Szl0)!*
## Spring Cleaning
In addition to this more visible work, there has been lots of other things going on as we clean up our code base and bring maturity and predictability to the project. This has included:
* Many improvement to the validation server: more resiliance, better logging of failures, and some performance improvements.
* As I wrote about the other day, we are now doing [automated daily testing of accomplishments](https://archivedblog.jonobacon.com/2012/05/14/precision-and-reliability-in-ubuntu-accomplishments/) as well as graphing growth.
* Improving our documentation and support for how people can contribute to the project as well as contributing accomplishments.
# Moving Forward
I just want to say a huge thank-you to everyone who has been participating in the project! I am looking forward to 0.2 as another important milesone. I will be following up in the next week about areas in which we are looking for help in the project that you might be able to contribute to.
If you are interested in joining us, be sure to [install it](https://wiki.ubuntu.com/Accomplishments/Installing), join `#ubuntu-accomplishments` on Freenode IRC, and join the [mailing list](https://launchpad.net/~ubuntu-accomplishments-contributors).
Testing and Instrumentation
Recently I have been talking a little about [building quality and precision into Ubuntu Accomplishments](https://archivedblog.jonobacon.com/2012/05/14/precision-and-reliability-in-ubuntu-accomplishments/). Tonight I put one of the final missing pieces in place and I thought I would share in a little more detail about some of this work. Some of you might find this useful in your own projects.
Before I get started though, I just wanted to [encourage you to start playing our software](https://wiki.ubuntu.com/Accomplishments/Installing) and for those of you that had a crash when using certain languages with the *Accomplishments Information* viewer, I released a `0.1.2` update earlier that fixes this.
## Automated Testing
As we continue to grow the [Ubuntu Community Accomplishments](https://launchpad.net/ubuntu-community-accomplishments) collection it is going to be more and more complex to ensure all of the accomplishments are working effectively every day; we are already at 28 accomplishments and growing! What’s more, the community accomplishments scripts work by checking third-party services for data (e.g. Launchpad) to assess if you have accomplished something. These external services may change their APIs, adjust how they work, add/reduce services etc, so we need to know right away when one of our accomplishments no longer works and needs updating.
To do this I wrote a tool called *battery*. It works by reading in a test that is available for each accomplishment that feeds the accomplishment validation data that should succeed and also data that should not validate. As an example, for the *Ubuntu Member* accomplishment the data that succeeds is an existing member’s email address (such as my own) and the test for failure is an email address on Launchpad that is not a member. The original script requires the user’s email address to assess this accomplishment, so *battery* tests simply require the same types of information, with data that can trigger success and failure.
This approach allows us to test for three outcomes:
* That the valid email address returns exit code `0` (the script ran successfully and the user is verified as being an Ubuntu Member).
* That the invalid email address returns exit code `1` (the script ran successfully but the user is not an Ubuntu Member).
* If the script has an internal issues and returns exit code `2`.
The way this works is that battery includes a customized version of the general `accomplishments.daemon` module that we use for the backend service. In the code I override the back-end module and load a custom module. This way the original accomplishment script does not need to be modified; instead of `get_extra_information()` calling the back-end daemon and gathering the user’s details, the custom module that comes with *battery* instead has it’s own `get_extra_information()` that gets returns the test data so *battery* can run the tests.
Originally *battery* only output textual results, but this would require us manually running it. As such, last night I added HTML output support. I then enabled *battery* to run once a day and automatically update the HTML results. You can see the output [here](https://213.138.100.229/battery/).
There are a few important features in this report other than a list of all the accomplishment test results:
* It shows the failures: this provides a simple way for us to dive into the accomplishments and fix issues where they occur.
* It shows which tests, if any, are missing. This gives us a TODO lists for tests that we need to write.
While this was useful, it still required that we would remember to visit the web page to see the results. This could result in days passing without us noticing a failure.
Tonight I fixed this by adding email output support to *battery*. With it I can pass an email address as a command-line switch and *battery* will generate an email report of the test run. I also added *battery*’s default behavior to only generate an email when there are failures or tests are missing. This prevents it generating results that don’t need action.
With this feature I have set *battery* to send a daily “Weather Report” to the [Ubuntu Accomplishments mailing list](https://launchpad.net/~ubuntu-accomplishments-contributors); this means that whenever we see a weather report, something needs fixing. π
One final, rather nice feature, that I also added was the ability to run *battery* on one specific accomplishment. This is useful for when we are reviewing contributions of new accomplishments; we ask every contributor to add one of these simple tests, and using *battery* we can test that the script works for validation success, validation failure, and script failure with a single command. This makes reviewing contributions much easier and faster and improves our test coverage.
## Graphing
Something Mark Shuttleworth discussed at UDS was the idea of us building instrumentation into projects to help us identify ways in which we can make better decisions around how we build software. This is something I have also been thinking of for a while, and to kick the tyres on this I wanted to first track popularity and usage of Ubuntu Accomplishments before exploring other ways of learning how people contribute to communities to help us build a better community.
Just before we [released version 0.1](https://archivedblog.jonobacon.com/2012/05/01/first-ubuntu-accomplishments-release/) of Ubuntu Accomplishments, I created a little script that does a scan of the validation server to generate some statistics about the number of daily new users, the daily number of new trophies issued, and the totals. Importantly, I only count users and trophies, and I am only interest in publishing anonymized data, not exposing someone’s own activity.
To do this my script scans the data and generates a CSV file with the information I am interested in. I then used the rather awesome [Google Charts](https://developers.google.com/chart/) API to take my CSV and generate the Javascript need to display the graph. Here are some examples:
While this is not exactly instrumentation, it got me thinking about the kind of data that could be interesting to explore. As an example, we could arguably explore which types of contributions in our community are of most interest in our users, how effective our documentation and resources are, which processes are working better than others, and also some client side instrumentation that explores how people use Ubuntu Accomplishments and how they find it rewarding and empowering.
Importantly, none of this instrumentation will happen without anyone’s consent; privacy always has to be key, but I think the idea of exploring patterns and interesting views of data could be a fantastic means of building better software and communities.
Accomplishing An Awesome App Developer Platform
At the Ubuntu Developer Summit last week I delivered a plenary on the Tuesday called *Accomplishing An Awesome App Developer Platform* that tells the story of how the Ubuntu app developer platform enabled me to build the [Ubuntu Accomplishments](https://wiki.ubuntu.com/Accomplishments) system that I designed with Aq. The presentation walks through the story of how we designed the system, and how everything was available in Ubuntu to create the client, back-end daemon, validation server, and desktop integration. I think it is a good example of how Ubuntu can help app devs to create interesting ideas and apps.
I thought this might be handy to have on YouTube, so I re-recorded it today, and you can see the video below:
*Can’t see it? [Watch it here](https://youtu.be/dDXlh5rE1Eg)!*
If you want to create your own application for Ubuntu, be sure to visit [developer.ubuntu.com](https://developer.ubuntu.com).
Ubuntu Community Accomplishments Collection 0.1.1 Released
I just released a new update for the Ubuntu Community Accomplishments collection. This new release (0.1.1) includes the following new community accomplishments:
* Accomplishments Contributor
* Attend LoCo Team Event
* Bug Squad Member
* Ubuntu Forums Council Member
* Ubuntu Forums Staff Member
* Imported an SSH Key
* Ubuntu Beginners Team Council Member
* Ubuntu Beginners Team Member
* Bug Control Member
* Ubuntu Forums Ubuntu Member
* Launchpad Profile Mugshot is now fixed too.
Thanks to *Silver Fox, Michael Hall, Matt Fischer, Rafal Cieslek, Angelo Compagnucci* for contributing these additions! It is wonderful to see our community growing!
If you want to contribute accomplishments, be sure to see [our guidelines](https://wiki.ubuntu.com/Accomplishments/Creating/Guidelines), some [suggestions](https://wiki.ubuntu.com/Accomplishments/AccomplishmentIdeas), and [how to get started](https://wiki.ubuntu.com/Accomplishments/Creating/Guide)!
If you are already running Ubuntu Accomplishments 0.1, you just need to do the following to get the new set:
sudo apt-get update
sudo apt-get upgrade
If you are running the daemon, kill it first with `killall -9 twistd` and then load *Accomplishments Information* from the dash.
If you are new to Ubuntu Accomplishments, be sure you have your Ubuntu One set up and running on your computer, and then follow [these installation instructions](https://wiki.ubuntu.com/Accomplishments/Installing).
Precision and Reliability in Ubuntu Accomplishments
In the Ubuntu world we have some common values that are not just focused on freedom, but also in how we build Ubuntu. Values such as *cadence*, *design*, *quality* and *precision* help guide us in building the best Ubuntu that we can.
These values continued to be common themes at the recent Ubuntu Developer Summit in California. Today our culture continues to involve important integration work that is a rich and interesting challenge, but this work has also been augmented by us building *assurances* around Ubuntu too; assurances such as regular releases (*cadence*), the reliability and quality of the experience (*quality*), and attention to detail in both design and engineering (*precision*) are all examples of the strong balance of predictability and innovation that we want to bring.
These values are not limited to Ubuntu though: we want Ubuntu to be a platform where you can get the very best software experience, whether you are using Open Source or commercial applications. In a nutshell, we want to take the lessons we have been learning regarding *cadence, design, quality* and *precision* and share them with our upstreams. This is going to be a big chunk of what Michael Hall will be focusing on in the coming months.
One upstream project though that I am actively involved in in my spare time is [Ubuntu Accomplishments](https://wiki.ubuntu.com/Accomplishments) and I wanted to share some of our plans surrounding our next 0.2 release and how these values are forming an important core of this work. Before I continue though, I just want to say a huge *thank-you* to everyone who has been participating in Ubuntu Accomplishments. Ever since our 0.1 release a few weeks ago we have had over 180 people start using this very early PPA and a number of people have started contributing accomplishments. Thanks to all of you!
## Quality
With the expanded number of accomplishments being contributed, I started thinking last week about how we could perform better testing around these contributions as well as daily testing reports; I wanted to ensure that our project, even though we are very young and small, demonstrates a level of *quality* that we can be proud of. To kick this off, this weekend I wrote a small tool called *battery* that helps us assure quality. I created a validation test for every accomplishment and *battery* runs all the accomplishments and feeds them this data that will cause an accomplishment to succeed as well as fail. This serves a few valuable purposes:
* We now have better testing for new contributions and we can test both success and failure more effectively.
* We can build testing into the accomplishment submission process so that when someone contributes an accomplishment we will ask them to also submit a test file (the test file is extremely simple and just specifies data used for success and data used for failure). This should take a contributor ten seconds to put together.
* Finally, we can now run *battery* in an automated environment every day and have it alert us when one of the tests fails. This gives us better visibility on our accomplishments collections to ensure that we can *assure quality* and resolve issues quickly.
As an important part of building good design into the system, *battery* was designed to not require any changes to the existing accomplishments sets and require a *bare minimum* from our contributors who should be spending more time having fun writing accomplishments than caring about tests. I am delighted with the results.
## The Road To 0.2
In addition to helping to ensure the accomplishment contribution process is simple (see our [list of ideas for accomplishments](https://wiki.ubuntu.com/Accomplishments/Trophies) and [how to create them](https://wiki.ubuntu.com/Accomplishments/Creating)), we have been planning the 0.2 release. This will continue to focus on refinements and building a strong, reliable platform for both community and local accomplishments.
We will be focusing on the following in the 0.2 cycle:
* **Local Accomplishment Support** – in 0.1 we focused our efforts primarily on community accomplishments (that is, accomplishments that need to be verified). Although we have always supported local accomplishments (these are accomplishments on your computer such as installing a package for the first time or sending your first email), this local support was a little broken in 0.1. I have already landed a branch from Rafal that fixes these bugs, using GNOME Mines as the test application. We will continue to refine this support.
* **Daemon and API Refinements** – this won’t be visible to the user but we are planning a [raft of API improvements](https://wiki.ubuntu.com/Accomplishments/NewAPI) to ensure that the back-end daemon is *precise* and high quality. This requires some functional changes, API naming conventions, standardizing on accomplishment IDs and other improvements.
* **Growing Ubuntu Community Accomplishments** – we plan on continuing to grow and expand the Ubuntu Community Accomplishments collection. We need help though, and that help could come from you! If you know a little Python and want to help our community, be sure to let me know! You can also join our IRC channel at `#ubuntu-accomplishments`.
* **Introducing Ubuntu Desktop Accomplishments** – we plan on introducing our first set of desktop accomplishments that can be used with the local accomplishments feature in the system. This will help us to start mapping out an awesome journey for how ours users use the desktop, discover things to do, and more!
It was wonderful to see the excitement and interest around Ubuntu Accomplishments at UDS, and I am excited to see where the project can take us. If you want to join us, be sure to [join the mailing list](https://launchpad.net/~ubuntu-accomplishments-contributors) and/or join us on IRC on freenode in `#ubuntu-accomplishments`.
EA Games and Ubuntu
[Electronic Arts](https://www.ea.com/) are delivering two games into Ubuntu, *Command & Conquer Tiberium Alliances* and *Lord of Ultima*. They are currently available in the Ubuntu Software Center.
While some may focus on the fact that these are loading web apps, the really exciting opportunity here is that EA have identified Ubuntu as an exciting channel to deliver their content. I would like to encourage our community to welcome EA to Ubuntu, and download and enjoy the games.
Let’s not get side-tracked by the fact that these are web games and not native to Ubuntu: EA are dipping their toes in Ubuntu as a channel of opportunity, and let’s welcome them with open arms.
Oakland Ubuntu Folks: Severed Fifth Playing Tonight
Just a quick reminded that my band [Severed Fifth](https://www.severedfifth.com) will be playing tonight at:
Roosters Roadhouse, 1700 Clement Avenue, Alameda, CA 94501
This is about a 5 – 10min cab ride from the Oakland Marriot hotel.
Get down there for about 7.30pm to ensure you get your tickets as the show has sold out of pre-sold tickets. We go on stage at 8pm. Hope to see you there!
Accomplishments Needed: Can You Help?
Some of you may have seen the [news of our very first Ubuntu Accomplishments release](https://archivedblog.jonobacon.com/2012/05/01/first-ubuntu-accomplishments-release/). Thank-you to everyone for testing the system; the feedback has been wonderful so far. π
The power of the Ubuntu Accomplishments system is dependant on the range of accomplishments available to our users; a comprehensive range of accomplishments that span the full Ubuntu community will make the system an exciting and empowering resource. As such, I would like to put out a call to encourage you lovely people to contribute some accomplishments
Fortunately all you need to know is a little Python to contribute here.
## How to Participate
This is how you can help:
1. First, ensure you are running the new release. Find out how to install it by [clicking here](https://archivedblog.jonobacon.com/2012/05/01/first-ubuntu-accomplishments-release/).
2. Now familiarise yourself with our [guidelines](https://wiki.ubuntu.com/Accomplishments/Creating/Guidelines) for what makes a great accomplishment (we are looking to avoid the ‘*X number of SOMETHING achieved*’ accomplishments as they can be gamed and abused easily. We are instead looking for accomplishments for *new experiences and skills* such as ‘*First Translation Made*’ or ‘*First Contribution to the Ubuntu Sponsorship Queue*’. *We have lots of ideas available on [this page](https://wiki.ubuntu.com/Accomplishments/Trophies) for inspiration!*
3. Now [read the tutorial](https://wiki.ubuntu.com/Accomplishments/Creating/Guide) and create your accomplishment (thanks to *Rafal Cieslak* for his excellent work on the tutorial).
4. With your accomplishment ready, submit it to the project and we will review it: details of how to do this are in the tutorial.
Thanks!
*Importantly, while this blog post is seeking contributions for the Ubuntu Community collection of accomplishments, if you want to create a collection of accomplishments for your community or project (e.g. your software project, distro, local user group etc), you can use the same tutorial and resources to get started! Let us know if you have any questions!*
## Getting Help
If you have questions, you can get help in a few places:
* Join the [mailing list](https://launchpad.net/~ubuntu-accomplishments-contributors) – we have an active email discussion list and you are welcome to join and post questions.
* IRC Channel – we have the `#ubuntu-accomplishments` channel on the freenode IRC network.
Thanks so much for your contributions!
Ubuntu Accomplishments Lens Released
Yesterday I [announced the first Ubuntu Accomplishments](https://archivedblog.jonobacon.com/2012/05/01/first-ubuntu-accomplishments-release/) release. It is wonderful to see so many of you trying the system; many thanks!
As part of the 0.1 release, we have added *David CallΓ©*’s Ubuntu Accomplishments Unity lens to the 0.1 PPA. It looks like this:
The lens neatly integrates into your desktop your trophies and available opportunities. Clicking on an opportunity will show information about how to accomplish it.
## Installing
To install the lens first, add the PPA to your system with:
sudo add-apt-repository ppa:ubuntu-accomplishments/releases
Now update your package list:
sudo apt-get update
Ensure you have the full Ubuntu Accomplishments system (including the `accomplishments-lens` package):
sudo apt-get install accomplishments-daemon accomplishments-viewer
ubuntu-community-accomplishments accomplishments-lens
You will need to re-login to see the lens.
Please note: you will need to have the accomplishments back-end process running to use the lens. This is simple: just load *Accomplishments Information* from the dash and this will start the back-end process. You can now view the lens.
As ever, you can report bugs [here](https://bugs.launchpad.net/ubuntu-accomplishments-system/+filebug).
Thanks, David, for your efforts in creating the lens!