Troubleshooting as a Choose Your Own Adventure


We have a lot of documentation and help in the Ubuntu project, and much of it is quite hostile to new users. We have IRC channels, mailing lists, dense & out of date wiki pages, lengthy and hard to consume forum posts & lengthy out of date tutorial videos. We also have some more modern tools such as AskUbuntu and Discourse.

Most are good for asking one specific question, but most aren't well suited to guiding a user through a specific problem diagnosis. If you know what questions to ask, then a search engine might find part of the problem, or hopefully part of the solution.

However one aspect we don't cover very well is guided self-support. This is very apparent in distribution upgrades. People often give up completely when an upgrade breaks down, rather than work through the problem as they would with anything else. There can be many reasons for this of course, but from what I've seen in the community, fixing a broken upgraded system is hard, and made harder when you only have a black screen, or tty to work with when you're not an expert.


I'm thinking very specifically about a target audience of non-technical users. Someone who uses Ubuntu but wants to feel empowered to fix a problem themselves, and not have to call their wife or daughter or other 'expert' to fix it. I want someone to find a guide which gets them out of the upgrade issue. Obviously I'd like us to fix the problem which cause the issues, but I want to start here, because frankly it's easier for me.


While I can hear some of my co-workers shouting "But popey, Snappy Core fixes the issue of broken updates!", no it doesn't, not today, and not while there are people running the traditional Debian based desktop - which I suspect will be for a good few years yet.


I can also hear those of you saying "I never do upgrades, I always clean install", and I'm happy for you, but we have an upgrade system, people should be confident that it works, and when it doesn't it should be fixable without going nuclear. Just the same as "Buy a new TV" isn't usually the solution to "My TV Remote stopped working".


In my mind a user might be more inclined to fix their system if there's an easy to use 'expert system' which they can walk through to get them working again. I wondered about this some time back and considered the idea of a Choose Your Own Adventure style of troubleshooting issues, rather than just punting people to IRC when their system breaks. We have been helping people with broken upgrades for years, surely we can amass the technical knowledge into a self-service system to help future users.

One assumption I am making with this is that the person going through this is able to access the Internet (and thus this guide) via another machine or their phone. This seems semi-reasonable as we often get people in IRC or on other support resources asking for help with a broken upgrade. So the guide should work well on any browser and ideally on mobile too.

There are of course unfortunate people for which they have only one computer and no smartphone so have no way to access this resource easily. This system doesn't cater for them well.


I made a little prototype using Twine which is an "an open-source tool for telling interactive, nonlinear stories." - typically text adventure or "Interactive Fiction" games, but can be used for other things too. I chose Twine because it's open source, easy to use, cross platform and simple. You can even create Twine 'stories' directly in your browser. Neat!

The output generated by Twine is HTML and can be customised and styled with a stylesheet. I did one simple bit of styling in that I used the Ubuntu font :).


Here's what the map of the 'world' looks like inside Twine (after I carefully moved the blocks around so none criss-cross):-

Twine Screenshot

Editing the pages within the 'story' is super easy, linking to other pages is as simple as typing the name of a new page in square brackets:-

Editing a page

You can try out the very early prototype I made at Obviously this isn't finished, won't actually help anyone fix their system, and is hosted somewhere obscure, all "TODO" items.


There's a few known issues with the above prototype twine:-

  • Browser back button exits the story, it should go back a step
  • Twine back button is hard to see, some CSS will fix that
  • Many of the pages are quite wordy, or technical, probably could be simplified


I wanted to share what I'd done to see if it seemed like a good idea, and whether people might be interested in helping create and curate content for it. The idea is to make a prototype and get some content rather than make the thing look especially pretty right now. The way I see it there's some important steps to do:-

  • Confirm this isn't a stupid idea (this blog post)
  • Figure out the best way to distribute this and make it accessible
  • Find people interested in helping
  • Identify a bunch of specific breakages that happen in Ubuntu upgrades
  • Craft diagnostic steps to identify one breakage scenario from another
  • Come up with robust solutions for each scenario
  • Test the scenarios
  • Publish and publicise the work

Things I haven't yet considered, but probably should:-

  • Translations
  • Accessibility
  • Co-ordinating work
  • How far back I'll roll my eyes at people telling me rolling distributions are better


Comments, suggestions or flames are welcome here or in my inbox.

DevRelCon 2015 Trip Report

Huh, this turned out to be longer than I expected. Don't feel obliged to read it, it's more notes for myself, and to remind me of why I liked the event.


On Wednesday I went to DevRelCon in London. DevRelCon is "a one day single track conference for technical evangelists, developer advocates and anyone interested in developer relations" setup by Matthew Revell. I don't think there's a lot of difference between my role (defined as Community Manager) at Canonical and Developer Relations so figured it would probably have appropriate content for my role. Boy was I right!

DevRelCon was easily the single most valuable short conference I've ever attended. The speakers were knowledgeable, friendly and accessible, and easy to understand. I took a ton of notes, and will distil some of them down here, but will almost certainly keep referring back to them over the coming months as I look to implement some of the suggestions I heard.


The event took place at The Trampery Old Street, in Shoreditch, the trendy/hipster part of London. We had access to a bright and airy 'ballroom' and were served with regular drinks, snacks and a light lunch. Free WiFi was also available, which worked well, but I didn't use it much as we had little time away from the talks.


The day consisted of a mix of long (40 minute) talks, some shorter (20 min) ones, and a few 'lightning' talks. Having a mix of durations worked well I think. We started a little late, but Matthew massaged the timetable to claw back some time, and as it was a single track day there was no real issue if things didn't run to time, as you weren't likely to run off to another talk, and miss something.

All the talks were great, but I took considerably more notes in some than others, so this is represented below in that I haven't listed every talk.

Morning Talks

Rob Spectre - Twilio - Scaling Developer Evangelism.

This started off well as Rob plugged in his laptop and we were greeted with an Ubuntu desktop! He started off detailing some interesting stats to focus our minds on who we're evangelising to. Starting with the 18.2m developers worldwide, given ~3Bn smartphone users, and ~4Bn Internet users that means ~0.08% have the capability to write code. There's a 6% year on year increase in developers, mostly in developing nations, the ratio is less in the western world. So for example India could overtake every other countries' developer count by ~2017.

Rob talked at length about the structure of Developer Evangelists, Developer Educators and the Community Team at Twilio. The talk continued to outline how valuable developers are, how at Twilio their Developer Evangelists are the 'Red Carpet' to their community. I was struck by how very differently we (Open Source projects) and Ubuntu specifically treat contributors to the project.

There was also a section on running developer events, and Rob spent some time talking about strategies for successful events, and how those can feed back to improve your product. He also talked a little about measurement, which was also going to be covered in later talks that day.

Another useful anecdote Rob detailed was regarding conversion of talks into blog posts. While a talk at an event can catalyse the 20-100 people in the room, converting that into a detailed tutorial blog post can bring in hundreds or thousands more.

The final slide in Rob's talk was "Would you recommend this talk?" with a phone number attendees could send a score to. I thought this was a particularly cunning strategy. There was also talk of using the external IP address of the venue WiFi as one factor to determine the effectiveness / conversion rate of attendees.

Cristiano Betta - Braintree - Tooling your way to a great devrel team

Cristiano started off talking about BattleHack which I'd not heard of. These are in person events where teams of developers get 24 hours to work on a project fuelled by coffee, cake and Red Bull to be in with a chance of winning a cash prize and an amusing axe.

He then went on to talk about a personal project to manage event sign-ups. This replaces tools like Eventbrite and MailChimp and enables Cristiano to get a better handle on the success of his events.

Laura Cowen - IBM - Building a developer community in an enterprise world

Laura started off giving some history of the products and groups inside IBM who are responsible for WAS, the public facing developer sites and the struggles she's had updating them

The interesting parts for me came when Laura was detailing the pain she had getting developer time to update documentation and engage with users and communities outside their own four walls. Laura also talked about the difficulty when interfacing developers and marketing, their differing goals and some strategies for coping.

I recognised for example the frustration in people wanting to publish everything on a developer site, whether it's appropriate to the target audience or not. Sometimes we (in Ubuntu) fail to deeply consider the target audience before we publish articles, guides or documentation. I think we can do better here. Pushing back on content creators, and finding the right place for a published article is worth it, if the target audience is to be defended.

Lightning Talks

Shaunak Kashyap - elastic - Getting the measure of DevRel

In this short talk Shaunak gave some interesting snippets on how elastic measure community engagement. I found a couple interesting which I felt we might use in Ubuntu. Measuring "time to first response" for questions and issues by looking for responses from someone other than the first poster. While I don't think they were actively using this data yet, getting an initial base line would be useful.

Shaunak also detailed one factor in measuring meet-up effectiveness. Typically elastic have 3-4 meet-ups a week, globally. For each meet-up group they measured "time since last meetup". For those where there was a long delta between one meetup and the next they would consider actions. This could be contacting the group to see if there's issues, offering assistance, swag & 'meet up in a box' kits, and finally disbanding the group if there wasn't sufficient critical mass.

I took away a few good ideas from this talk, especially given recent conversations in Ubuntu about sparking up more meet-ups.

Phil Leggetter - Pusher - ROI on DevRel

Phil kicked off his short talk by talking about the ROI on DevRel by explaining Acquisition vs Activation. Where Acquisition of new developers might be them signing up for an account or downloading a product/sdk/library. Activation would be the conversion which might be measured differently per product. So perhaps "purchased paid API key" or "submitted app with N downloads".

Phil then moved on to talk a bit about how they can measure the effectiveness of online tutorials or blog articles by correlating sign ups with traffic coming from those online articles. There was some more discussion on this later on including the effectiveness of giving away vouchers/codes to incentivise downloads, with some disagreement on the results of doing so.

Afternoon Talks

Brandon West - SendGrid - Burnout

I've been to many talks and discussions about burnout in developer communities over the years. This talk from Brandon one was easily the most useful, factual and actionable one. I also enjoyed Brandon's attempts to inject Britishness into his talk which lightened the mood on a potentially very dark topic.

Brendon kicked off with a bit of a 'woe is me' #firstworldproblems introduction to his own current life issues. The usual things that affect a lot of people, but all happening at once, becoming overwhelming. We then moved on to defining burnout clearly, and what types of people are likely to suffer (clue: anyone) and some strategies for recognizing and preventing burnout.

A few key assertions / take-aways:-

"Burnout & depression are pathalogically indistinguishable" "Burnout and work engagement are not exclusive or correlatable" "Those most likely to burnout believe they are least at risk" "Learn a skill on holiday - the holiday will be more rewarding"

Tim Fogarty - Major League Hacking - Hackathons as a part of your DevRel strategy

Another great talk which built upon what Cristiano talked about earlier in the day - hackathons. Tim introduced different types of hackathons and which in his experience were more popular with developers and why.

Tim started by breaking down the types of hackathon - 'hacking', 'corporate' and 'civic' with the second being least popular as it's seen as free labour by developers, and so they're distrustful. He went on to reasons why people might run hackathons including evangelism, gathering (+ve and -ve) feedback, recruiting and mindshare (marketing).

He then moved on to strategies for making an impact, measuring the effect, sponsoring and how to craft the perfect demo to kick off the event.

Having never been to an in-person hackathon I found this another fascinating talk and will be following up with Tim Later.

Jessica Rose - Stop talking about diversity and just do it

Well. This was enlightening. This talk was excellent, and covered two main topics. First the focus was on getting a more diverse set of people running / attending / talking at your event. Some strategies were discussed and Jessica highlighted where many people go terribly wrong, assumptions people make and excuses people give.

The second part was a conversation about the ways in which an event can cater for as many people as possible. Here's a highlight of some of the ways we discussed, but this obviously doesn't cover everything:-

  • Attendees and speakers should be able to get in under their own power
  • Meal choices should be available - possibly beyond vegetarian/vegan
  • Code of Conduct
  • Sign language for talks
  • Well lit and safe feeling route from venue to accomodation
  • Space for breastfeeding / pumping, with snacks / drinks nearby
  • Non boozy spaces
  • Prayer room
  • After party with low noise level - and covered by Code of Conduct
  • Childcare
  • Professional chapparones (for under 18's)
  • Diversity tickets & travel grants
  • Scale inclusivity to budget (be realistic about what you can achieve)

Lots to think about!

Joe Nash - Braintree - Engaging Students

Joe kicked off his fast-paced talk with an introduction to things which influenced how he got where he is, including "Twilio Heroes". The talk was focussed on the UK University system, how to engage with students and some tips for running events which engage effectively with both CS and non-CS students.

James Milner - ersi UK - So you want to run a meet-up

James talked about his personal experience running GeoDev Meet-Ups. I found this information quite valuable as the subject is under discussion in Ubuntu. James gave some great tips for running good meet-ups, and had a number of things he's clearly learned the hard way. I hope to put some of his tips into action in the UK.

Dawn Foster - Lessons about community from science fiction.

This was a great uplifting talk to end the day. Dawn drew inspiration from her prolific science fiction reading to come up with some tips for people running community projects. I'll give you a flavour with a few of them. Each was accompanied by an appropriate picture.

Picture: Star Trek Red Shirt Lesson: "Participate and contribute in a way that people will notice and value your work"

Picture: Doctor Who TARDIS Lesson: "Communities look different from inside then when viewing as an outsider"

Picture: Enders Game Lesson: "Age is often unknown, encourage young people to contribute"

Dawn is a thoughtful, entertaining and engaging speaker. I'd certainly like to see more of her talks.

After Party

We all left the venue after the last talk and headed to a nearby trendy bar for a pint then headed home, pretty exhausted. A great event, I look forward to the next one.

Easily port mobile HTML5 games to Ubuntu Phone

Article also available in Spanish at thanks to Marcos Costales.

I really like playing games on my phone & tablet and wanted some more games to play on Ubuntu. With a little work it turns out it's really pretty easy to 'port' games over to Ubuntu phone. I put the word 'port' in quotes simply because in some cases it's not a tremendous amount of effort, so calling it a 'port' might make people think it's more work than it is.

Update: A few people have asked why someone would want to even do this, and why not just bookmark a game in the browser. Sorry if that's not clear. With this method the game is entirely cached offline on the customer phone. Having fully offline games is desirable in many situations including when travelling or in a location with spotty Internet access. Not all games are fully offline of course, this method wouldn't help with a large on-line multi-player game like Clash of Clans for example. It would be great for many other titles though. This method also makes use of application confinement on Ubuntu so the app/game cannot access anything outside of the game data directory.

I worked with sturmflut from the Ubuntu Insiders on this over a few evenings and weekends. He wrote it up in his post Panda Madness.

We had some fun porting a few games and I wanted to share what we did so others can do the same. We created a simple template on github which can be used as a starting point, but I wanted to explain the process and the issues I had, so others can port apps/games.

If you have any questions feel free to leave me a comment, or if you'd rather talk privately you can get in contact in other ways.

Proof of concept

To prove that we could easily port existing games, we licensed a couple of games from Code Canyon. This is a marketplace where developers can license their games either for other developers to learn from, build upon or redistribute as-is. I started with a little game called Don't Crash which is an HTML5 game written using Construct 2. I could have licensed other games, and other marketplaces are also available, but this seemed like a good low-cost way for me to test out this process.

Screenshot from 2015-07-28 13-06-19

Side note: Construct 2 by Scirra is a popular, powerful, point-and-click Windows-only tool for developing cross-platform HTML5 apps and games. It's used by a lot of indie game developers to create games for desktop browsers and mobile devices alike. In development is Construct 3 which aims to be backwards compatible, and available on Linux too.

Before I licensed Don't Crash I checked it worked satisfactorily on Ubuntu phone using the live preview feature on Code Canyon. I was happy it worked, so I paid and received a download containing the 'source' Construct 2 files.


If you're a developer with your own game, then you can of course skip the above step, because you've already got the code to port.

Porting to Ubuntu

The absolute minimum needed to port a game is a few text files and the directory containing the game code. Sometimes a couple of tweaks are needed for things like permissions and lock rotation, but mostly it Just Works(TM).

I'm using an Ubuntu machine for all the packaging and testing, but in this instance I needed a Windows machine to export out the game runtime using Construct 2. Your requirements may vary, but for Ubuntu if you don't have one, you could install it in a VM like VMWare or VirtualBox, then add the SDK tools as detailed at

This is the entire contents of the directory, with the game itself in the www/ folder.

alan@deep-thought:~/phablet/code/popey/licensed/html5_dontcrash⟫ ls -l
total 52
-rw-rw-r-- 1 alan alan   171 Jul 25 00:51 app.desktop
-rw-rw-r-- 1 alan alan   167 Jun  9 17:19 app.json
-rw-rw-r-- 1 alan alan 32826 May 19 19:01 icon.png
-rw-rw-r-- 1 alan alan   366 Jul 25 00:51 manifest.json
drwxrwxr-x 4 alan alan  4096 Jul 24 23:55 www

Creating the metadata


This contains the basic details about your app like name, description, author, contact email and so on. Here's mine (called manifest.json) from the latest version of Don't Crash. Most of it should be fairly self-explanitory. You can simply replace each of the fields with your app details.

    "description":  "Don't Crash!",
    "framework":    "ubuntu-sdk-14.10-html",
    "hooks": {
        "dontcrash": {
            "apparmor": "app.json",
            "desktop":  "app.desktop"
    "maintainer":   "Alan Pope ",
    "name":         "dontcrash.popey",
    "title":        "Don't Crash!",
    "version":      "0.22"

Note: "popey" is my developer namespace in the store, you'll need to specify your namespace which you configure in your account page on the developer portal.

Screenshot from 2015-07-28 13-11-17

Security profile

Named app.json, this details what permissions my app needs in order to run:-

    "template": "ubuntu-webapp",
    "policy_groups": [
    "policy_version": 1.2
Desktop file

This defines how the app is launched, what the icon filename is, and some other details:-

[Desktop Entry]
Name=Don't Crash
Comment=Avoid the other cars
Exec=webapp-container $@ www/index.html

Again, change the Name and Comment fields, and you're mostly done here.

Building a click package

With those files created, and an icon.png thrown in, I can now build my click package for uploading to the store. Here's that process in its entirety:-

alan@deep-thought:~/phablet/code/popey/licensed⟫ click build html5_dontcrash/
Now executing: click-review ./
./ pass
Successfully built package in './'.

Which on my laptop took about a second.

Note the "pass" is output from the click-review tool which sanity checks click packages immediately after building, to make sure there's no errors likely to cause it to be rejected from the store.

Testing on an Ubuntu device

Testing the click package on a device is pretty easy. It's just a case of copying the click package over from my Ubuntu machine via a USB cable using adb, then installing it.

adb push /tmp
adb shell
pkcon install-local --allow-untrusted /tmp/

Switch to the app scope and pull down to refresh, tap the icon and play the game.


Success! :)


Tweaking the app

At this point for some of the games I noticed some issues which I'll highlight here in case others also have them:-

Local loading of files

Construct 2 moans that "Exported games won't work until you upload them. (When running on the file:/// protocol, browsers block many features from working for security reasons." in a javascript popup and the game doesn't start. I just removed that chunk of js which does the check from the index.html and the game works fine in our browser.

Device orientation

With the most recent Over The Air (OTA) update of Ubuntu we enabled device orientation everywhere which means some games can rotate and become unplayable. We can lock games to be portrait or landscape in the desktop file (created above) by simply adding this line:-


Obviously changing "portrait" to "landscape" if your game is horizontally played. For Don't Crash I didn't do this because the developer had coded orientation detection in the game, and tells the player to rotate the device when it's the wrong way round.

Twitter links

Some games we ported have Twitter links in the game so players can tweet their score. Unfortunately the mobile web version of Twitter doesn't support intents so you can't have a link which contains the content "Check out my score in Don't Crash" embedded in it for example. So I just removed the Twitter links for now.


Our browser doesn't support locally served cookies. Some games use this. For Heroine Dusk I ported from cookies to Local Storage which worked fine.

Uploading to the store

Uploading click packages to the Ubuntu store is fast and easy. Simply visit, sign up/in, click "New Application" and follow the upload steps.

Screenshot from 2015-07-28 13-10-31

That's it! I look forward to seeing some more games in the store soon. Patches also welcome to the template on github.

Making a Portable Persistent Ubuntu USB Stick

I recently wanted to make a slightly modified persistent bootable USB stick running a recent version Ubuntu. I made some notes and have put them here in case they're useful to anyone else. It's a bit of a manual process which could probably be streamlined / automated. This was just what I did as a one-off, take from it what you will.

USB3 sticks in a USB3 port work best as USB2 can be a bit on the slow side, especially for IO intensive operations like package installation or compiling.

Note: A few people have pointed out the fragility and short lifespan of USB sticks. This same procedure can be used to install on a hard disk or SSD in a USB enclosure. Once the image is copied to the external storage, simply use gparted to resize it up to take all available space. The goal I had was to make an image which can be copied to USB stick to provide a persistent bootable Ubuntu SDK development environment. This could be useful for people who don't run Ubuntu as their primary OS (Yes, these people exist, I know right!?) but want to dabble in Ubuntu application development. It's also handy if you're running an App Dev School where the computers aren't yours, or run some other OS. The students could potentially take the sticks away with the full OS and all their work on. Just make the image and then copy it to multiple sticks before the class starts.

I also wanted to make it ask for locale and user details on first boot, so it could be easily configured and used in any language. This is pretty easy given the Ubuntu installer has all of that built in.

I used Ubuntu 15.04 i386 (but also tried with Ubuntu 14.04.1 LTS) and an 8GB USB stick which leaves a couple of GB over for work. Obviously a larger stick gives more space to the user. It turned out though that using an 8GB USB stick was a bit tight for SDK work. I ended up with 76MB left after creating one 15.04 armhf kit. Maybe 8GB is good for desktop and qml/html5 only development (although still a bit tight), but not for cross architecture or other binary builds. 16GB would have enough room for multiple kits and could build binaries for devices.

Some of these steps can be done in the background while you do other things. It's not a massively time consuming task if you have a decent connection and fast USB stick / hard disk, but as I mentioned, is a bit manual.

The result is a USB stick which you can boot from and work off with data saved to the stick. You can optionally enable home directory encryption during the final end-user setup if that's important to you.

Step 1 - Prep

Have an 8GB (or larger) USB 3 stick handy. I am using Kingston 8 GB USB 3.0 DataTraveler G4 Flash Drive and later Kingston Technology 16GB Data Traveler G4 USB 3.0 Flash Drive. Faster sticks are available of course, but I wanted something cheap to prototype on. Have a laptop with a USB 3 port (or ports) and supports kvm. I did all this on my Ubuntu Vivid Vervet (15.04) Thinkpad X220 laptop which has a single USB3 port. Make a directory on a local disk to store scratch image - will need 16GB or more space Install qemu-kvm and gddrescue on host Download ubuntu-15.04-desktop-i386.iso from (torrent link).

Step 2 - Installation of base system

Make a blank image on local disk

 dd if=/dev/zero of=./disk_image bs=1M count=7500

This should result in a file a bit under 8GB. e.g.
alan@deep-thought:/data/usb⟫ dd if=/dev/zero of=./disk_image bs=1048576 count=7500
7500+0 records in
7500+0 records out
7864320000 bytes (7.9 GB) copied, 34.468 s, 228 MB/s

Install Ubuntu into the image using kvm

sudo kvm -m 2048 -cdrom ~/Downloads/ubuntu-15.04-desktop-i386.iso -hda ./disk_image -boot d
This should boot off the ISO


At the A11Y (person = keyboard) icon, hit space


At the boot menu, choose language (this is just language for the installer, user will later choose which language to use)


Press F3 and choose keyboard layout


Press F4 and choose OEM install


Pick "Install" from the menu.



Follow the installer prompts as normal. I configured with no swap, but use the entire disk for an ext4 volume for the root filesystem. Set a password for the oem user, which will be thrown away later, and the user will get to set their own password. Shut-down at the end

Step 3 - Install the SDK

This is the part where you make the modifications to the image (if any). I wanted to install the Ubuntu SDK.

Optionally at this point, make a backup of your cleanly installed Ubuntu 15.04.1 system cp ./disk_image ./ubuntu_15.04_install_backup

Boot the previously created install (note the additional options - these are handy) sudo kvm -m 2048 -hda ./disk_image -chardev stdio,id=mon -mon mon Once booted to the desktop, in the terminal on the host at the (qemu) prompt type this to switch the VM to the console (which is faster to do stuff than the GUI :) ):- (qemu) sendkey ctrl-alt-f1 Login to the tty with the oem user/password set in Step 2. Follow the usual guide to install the SDK and update the system:- sudo add-apt-repository ppa:ubuntu-sdk-team/ppa sudo apt-get update sudo apt-get install ubuntu-sdk sudo apt-get dist-upgrade sudo apt-get clean sudo apt-get autoremove Shut down the vm sudo shutdown -h now

Optionally at this point, make a backup of your "SDK-installed" (or modified in whatever way you choose) OEM mode Ubuntu 15.04 system cp ./disk_image ./ubuntu_15.04_install_sdk_oem_backup

Note: At this point you can boot the disk image and do further customisation - maybe adding other packages which may be of use, but I stopped here.

Step 4 - Prepare the OEM image for 'shipping'

This is the point where we flip the switch in the installed image before handing it off to another user. On first boot they will get prompted to set locale and configure a new user.

Boot the previously created install which has the SDK installed sudo kvm -m 2048 -hda ./disk_image Click the "Prepare for shipping to end user" icon on the desktop - this sets the system to be ready for the first-boot experience for a new user Shut down the system

Step 5 - Test this all worked

Make a copy of the master image for testing cp ./disk_image ./testing_oem_install Boot the test image to try it out sudo kvm -m 2048 -hda ./testing_oem_install At this point you should be prompted for the usual post-install setup tasks including language / locale / username & password. Setup as you would a normal machine Open the SDK (or whatever you installed), test it all works I tried creating a kit and do other SDK related things Shutdown when done Delete the test image rm ./testing_oem_install

Step 6 - Copy the OEM image to a USB stick for shipping / use

Now we have a 'final' image (and optionally some backups) we can copy this to a stick for use by us / someone else. We can of course make more than one by doing this step multiple times with different sticks. On my system as you can see it took ~30 mins to copy the image to the stick. Faster, more expensive sticks may be better, these were pretty cheap.

Copy the disk image to an appropriately sized USB stick sudo ddrescue -d -D --force ./disk_image /dev/sdX


 alan@deep-thought:/data/usb⟫ time sudo ddrescue -D -d --force disk_image /dev/sdc
GNU ddrescue 1.19
Press Ctrl-C to interrupt
rescued:     7864 MB,  errsize:       0 B,  current rate:    1966 kB/s
   ipos:     7864 MB,   errors:       0,    average rate:    4884 kB/s
   opos:     7864 MB, run time:   26.83 m,  successful read:       0 s ago

real    26m51.682s
user    0m1.212s
sys     0m30.084s

Step 7 - Test & use the stick

Put the USB stick in a computer set to boot from external media. Test that you get a desktop and the usual OEM prompts you got in Step 5. If that works then you can do step 5 again for the same stick or as many sticks as you have.


Comments and suggestions welcome!

FOSDEM 2015 Field Report

A little late, but here's my report from attending FOSDEM 2015 back at the start of February.

I've been to FOSDEM a few times in the past, but not for the last few years. It happened to co-incide with other events, or other family things took priority and then got out of the habit, so I'd not ended up going for 6 years or so!

This year at the last minute I applied for some funds to go, was accepted and made the most of it. I've listed below all the talks & sessions I went to, with some brain dump notes I took about some of them. At the bottom I listed some sessions which I didn't enjoy or get a lot out of, but are listed for completion. I've also linked directly to the videos of the talks if they're available at the time of writing. If not I've linked to the directory they should appear in at some point in the future.

A GPS watch made of free software and hardware - Federico Vaga, Matthieu Cattin Video:

Recycle your Android devices for anything: run real Linux on them - David Greaves Talk video:-
  • Room was pretty packed with quite a few Jolla / SailfishOS friendly people at the front - managed to score myself a Jolla beanie hat from them :)
  • I was interested in this talk because it was focussed mostly on porting Mer & SailfishOS to Android devices.
  • We have a similar porting guide in Ubuntu but ours was outdated and inaccurate. This was fixed recently.
  • The Mer project had a nice overview of ports status online (, which I've shamelessly stolen for Ubuntu (
  • Interested in the community they're building specifically around porting - dedicated irc channel, irc meetings and real world meet-ups are something we should probably consider for our (Ubuntu) porters because right now I think our porters feel a bit helpless at times
Are distributions really boring and a solved problem? - Lucas Nussbaum Video:
  • Illuminating talk about some of the problems the Debian project faces currently
  • As I'm not a Debian developer it was interesting to me to learn a bit about the Debian Sausage Factory and some of the issues they/we face
GCompris goes Qt Quick with the help of KDE - Bruno Coudoin Video:
  • A quick talk from Bruno about the work he's done to port GCompris to the Qt framework
  • Learned that the development model for GCompris includes using In-App-Purchases on non-free platforms (Google Play store) to fund development of Open Source projects.
Copyleft in Europe: How does copyleft interact with Exhaustion Of Rights - Amanda Brock, Andrew Katz Video:
  • This was a super fascinating and slightly complex legalese talk which I admit I didn't completely follow, but Amanda and Andrew made it digestable for a layman such as myself :)
Fork and Ignore: Fighting a GPL Violation By Coding Instead - Bradley M. Kuhn Video: Slides:
  • Brilliant talk from Bradley, one of the highlights from FOSDEM. Slides above are from a different event, but same talk as far as I can tell.
  • Was enlightening to see an alternative way to deal with a GPL violation than the default which seems to be to take legal action and sue
  • Not all forks are bad :)
Ubuntu on phones and beyond - Michał Sawicz Video:
  • Michał gave a brief talk to a pretty packed room about the current state of Ubuntu for devices, and the future direction
  • Turned into more of a Q&A, which was beneficial as much of the audience had questions to ask
  • Was interesting to see some of the same questions come up again and again
  • Depressing to still get "Haha! LOL Amazon shills" comments and questions
Mobile == Web - Stormy Peters Video:
  • Call to arms to developers to make their sites work well on the web for the next generation of smart phone users
  • Disappointed to see yet another Mozilla person preach about openness from the confines of a MacBook running OSX
Maintaining & Growing a technical community - Ali Spivak Video:-
  • Ali gave some illuminating stats about contributions to the Mozilla project and how that fluctuates over time
  • Lots of info about what motivates people to contribute to open source projects and Mozilla in particular
  • "Being open is no good if nobody can find your resources" - we (Ubuntu) have some fixes to do there
Internet all the things - using curl in your device - Daniel Stenberg Video:-
  • This was one of my favourite talks from FOSDEM. Learning how many projects use a simple (hah) tool like curl
  • Even learned about some command line options in curl that I'd not seen or used before.
  • Worth a watch
Living on Mars: A Beginner's Guide - Ryan MacDonald Video:-
  • Fantastic talk to round off FOSDEM 2015. Ryan gave a fast-paced & entertaining talk about the Mars One mission plan and his part in it.
Porting Tizen:Common to open source hardware devices - Phil Coval Video:-
  • Another porting talk (to go along with the Jolla one above) specifically talking about porting Tizen to Open Hardware
  • Interesting to hear about the Sunxi community build up around porting
Reached milestones and ongoing development on Replicant - Paul Kocialkowski Video:-
  • Fascinating talk detailing what lengths Paul goes to in order to develop a fully Free Software implementation of Android
  • In short, it's not 'finished', and with the limited number of devices it's possible to 'open up' probably won't be any time soon
GNOME - creating ripples in the Linux eco-system - Sri Ramkrishna Video:-
  • I was somewhat disappointed in this talk as it seemed to be billed as showcasing the best of what GNOME have done over the years, but came across as poorly thought through and the points a bit laboured.
Servo (the parallel web browser) and YOU! - Josh Matthews Video:-
  • Josh did a great job of showing the state of Servo right now and where gaps exist in the functionality, certainly worth watching for the Servo demo alone

Awesome Community is Awesome

While flash sales, conferences and trade shows happen, the Community Core Apps project rolls forward landing updates and fixes to Ubuntu Phone applications. Some are default apps on the devices bq customers will soon receive, others are easily installable from the click store. All are maintained by a community of Free Software developers. I'm incredibly proud of the work these people are doing and wanted to highlight some recent updates.

As with all the applications below, if you'd like to get involved in design, documentation, testing, translation or just plain writing code either get in contact with me, or with any of the developers listed below. They're all very nice people.

Weather Reboot

Andrew Hayzen, Victor Thompson and Nekhelesh Ramananthan got together to help Martin Borho reboot the Weather App with new designs created in collaboration with the Canonical Design Team. With a cleaner look, easier to use user interface, and fewer poke-your-eyes-out colour gradients, the new Weather app is coming along nicely!







Doc Viewer

Stefano Verzegnassi has been working hard on the usability and performance in the Doc Viewer. It now directly pulls documents from ~/Documents on the device and can receive files via Content-Hub such as those downloaded in the browser. Rendering performance has been improved, using multi-core page rendering to make use of the grunt in powerful phones. It's also now possible to manage documents directly in the app, so you can delete files from ~/Documents with a long-press and some taps, no file manager required. There's also a Table of Contents revealed from a bottom edge swipe, and a new document grid view.










While not currently a default app in devices, it's in the store and works really well on all Ubuntu devices. Upcoming is a refinement of the full screen reading experience to remove the header and some improvements to document zooming. Longer term we're also investigating and prototyping support for common office file formats.


Filippo Scognamiglio recently updated the Terminal app to support configurable keyboard overlays. The overlay is a strip above the default OSK (on screen keyboard) which can be populated with keyboard shortcuts or full commands. These are designed to supplement the OSK and allow fast access to complex keyboard combinations or frequently typed commands. The Terminal app ships with a small number of sample keyboard overlays, but it's easily user-expandable. Filippo blogged about it, read more there. If you create a cool overlay, do share it, and we may include it in a future update as a default. This update is in the store, available to install on Ubuntu devices.




Upcoming is a user interface change to easily switch on and off the keyboard overlays. So you may have 20 installed, but rarely use some, so can easily switch them off so they don't clutter the main UI. In addition Filippo is working on breaking up the terminal app into a re-usable component to make it easy to ship click packages containing a command line tool and terminal together. So for example a developer could bundle mutt+terminal in a click package in the store. Clearly not a typical use case for many phone users, but it'll certainly be useful for our early adopter hacker types :)


Kunal Parmar has updated the Calendar app with some nice UI and performance improvements. If you sync events with the Calendar then they should show up quicker in the app than previously. He also implemented the ability to move events around the calendar with a long press and drag. More recently we've noticed a couple of crashers which we're trying to get to the bottom of. Renato has a patch for EDS which seems promising! The latest Calendar update is in the store and available for testing as always.





Calculator Reboot

Riccardo Padovani and Bartosz Kosiorek have been completing work on the Calculator 'reboot'. We received a new design a while back which has been almost completed. We have some more design changes to make, but we plan to release this version to the store shortly as the default Calculator. You can currently test it by installing "Calculator Reboot" from the click store on your Ubuntu device. Feedback (and bugs) welcome as always.





Michael Zanetti and Riccardo Padovani have been really active with the Reminders app the last few weeks. Many bugs fixed, and a new offline mode for those that don't want to connect to Evernote. There's so many improvements which will require some additional QA before we upload to the store which should happen next week. This is a major update which has been a long time coming, and I'll talk more about that in detail when it's closer to landing.

Update: This update has landed in the store now!








Dan Chapman and Boren Zhang have been implementing designs provided by the Canonical design team in their Dekko Email app. The changes are coming thick and fast, and if you'd like to test some of the new features, then install the "Dekko (beta)" app from the click store.








Nekhelesh Ramananthan pushed a small but important update to the Clock app recently which makes translatable the cities which are listed in the app. Once that landed we asked the Ubuntu translators if they could kindly translate the 200+ strings. Over night ~30 languages were done with more coming in over the weekend. It never ceases to amaze me how fast and attentive the Ubuntu translation communities are!


A massive thank you to all the developers, designers, testers and translators who have helped improve all of these apps. As always, get in touch if you'd like to get involved!

Scopes Contest Mid-way Roundup

I recently blogged about my Ubuntu Scopes Contest Wishlist after we kicked off the Scopes Development Competition where Ubuntu Phone Scope developers can be in with a chance of winning cool devices and swag. See the above links for more details.

As a judge on that contest I've been keeping an eye out for interesting scopes that are under development for the competition. As we're at the half way point in the contest I thought I'd mention a few. Of course me mentioning them here doesn't mean they're favourites or winners, I'm just raising awareness of the competition and hopefully helping to inspire more people to get involved.

Developers have until 3rd December to complete their entry to be in with a chance of winning a laptop, tablet and other cool stuff. We'll accept new scopes in the Ubuntu Click Store at any time though :)

Robert Schroll is working on a GMail scope giving fast access to email.


Bogdan Cuza is developing a Mixcloud scope making it easy to search for cool songs and remixes.

Screenshot from 2014-11-10 18:57:32

Sam Segers has a Google Places scope making it easy to find local businesses.


Michael Weimann has been working on a Nearby Scope and has been blogging about his progress.


Dan has also been blogging about the Cinema Scope.


Finally Riccardo Padovani has been posting screenshots of his Duck Duck Go Scope which is already in the click store.


I'm sure there there are other scopes I've missed. Feel free to link to them in the comments. It's incredibly exciting for me to see early adopter developers embracing our fast-moving platform to realise their ideas.

Good luck to everyone entering the contest.

Ubuntu Scopes Contest Wishlist

We're running a Scope Development Competition with prizes including a laptop, tablets, and a bunch of cool Ubuntu swag. Check the above link for details.

I'm one of the judges, so I'm not allowed to enter which is both good and bad news. Good because then you won't see my terrible coding quality, but bad because I would really love one of these sweet Dell XPS laptops! :)

I do have things I'd like to see made as scopes, and some ideas for making ones that I might do in the future when time permits, and I thought I'd share them. As a judge I'm not saying "make this scope and I'll vote for your entry" of course, I simply figured I can give people some ideas, if they're stuck. We do have a set of criteria (see link above) for rating the scopes that are submitted, and those will be used for judging. None of those criteria are "whether it was on the list on popey's blog". These are just ideas to get people thinking about what might be possible / useful with a scope.

Surfacing my data

One of the goals of scopes is to enable users to easily and quickly get access to their data. That could be local data on the device or remote data in a silo somewhere online. Typically on other platforms you'd need a dedicated app to get at that data. To access your Spotify playlist you need the Spotify app, to access your LinkedIn data you need the LinkedIn app and so on. Many of the sites and services where my data is held is accessible via an API of some kind. I'd love to see scopes created to surface that data directly to my face when I want it.

Manage Spotify Playlist

I use and love Spotify. One problem I have is that I don't often add new music to my playlists. I don't use or value the search function in the app, or the social connected features (I don't have my Spotify hooked up to Facebook, and don't have any friends on Facebook anyway). I tend to add new music when I'm having a real life verbal conversation with people, or when listening to the radio.

So what I would like is some quick and easy way to add tracks to my playlist, which I can subsequently play later when I'm not in the pub / driving / listening to the radio during breakfast. This could possibly sign in to Spotify using my credentials, allow me to search for tracks and then use the API to add tracks to playlist

Amazon Wishlist

My family tell me I'm really hard to buy presents for, especially at this time of year. I disagree as I have an Amazon wishlist containing over a hundred items at all price points :) When I visit family they may ask what's on my wishlist to find out what I'm most interested in.

I'd like to be able to pull out my phone, and with a couple of swipes show them my wishlist. It would also be useful if it had the ability to 'share' the wishlist URL over some method (email is one, SMS might be another) so they get their own copy to peruse later.

I'd also like to be able to add things to the wishlist easily. Often when I'm out I think "That's cool, would love one of those" and that could be achieved with a simple search function, then add to my wishlist.

Location Specific

Satellites Overhead

I (and my kids) like to watch the International Space Station go over. Perhaps I enjoy it more than the kids who are made to stand outside in the cold, but whatever. When I travel it would be nice to have a scope which I can turn to during twilight hours to see when the ISS (or indeed other satellites) are passing overhead. This information appears to be publicly available via well documented APIs.

Upcoming TV Programmes

I frequently forget that my favourite TV programmes are on, or available to stream. It would be awesome to pull together data from somewhere like Trakt and show me which of my most loved programmes are going to be broadcast soon, on what local TV channel.

Events Nearby

When I travel I like to know if there's any music, social or tech events on locally that I might be interested in going to. There's quite a few sites where people post their events including Songkick, Meetup and Eventbrite (among many others I'm sure) which have a local event look-up API. One of the cool things about scopes is you can aggregate content from multiple scopes together. So there could be a scope for each of the above mentioned sites, plus a general "Local Events" scope which pulls data from all of those together. Going to one scope and refreshing when I arrive in a new location would be a great quick way to find out what's on locally.

Some of the above may be impractical or not possible due to API limitations or other technical issues, they're just some ideas I had when thinking about what I would like to see on my phone. I'm sure others can come up with great ideas too! Let your imagination run wild! :)

Good luck to all those entering the contest!

Sprinting in DC

For the last week I've been working with 230 other Ubuntu people in Washington, DC. We have sprints like this pretty frequently now and are a great way to collaborate and Get Things Done™ at high velocity.

This is the second sprint where we've invited some of the developers who are blazing a trail with our Core Apps project. Not everyone could make it to the sprint, and those who didn't were certainly missed. These are people who give their own time to work on some of the featured and default apps on the Ubuntu Phone, and perhaps in the future on the converged desktop.

It's been a busy week with discussion & planning punctuating intense hacking sessions. Once again I'm proud of the patience, professionalism and and hard work done by these guys working on bringing up our core apps project on a phone that hasn't event shipped a single device yet!

We've spent much of the week discussing and resolving design issues, fixing performance bugs, crashers and platform integration issues, as well as the odd game of 'Cards Against Humanity' & 'We Didn't Playtest This At All' in the bar afterwards.

Having 10 community developers in the same place as 200+ Canonical people accelerates things tremendously. Being able to go and sit with the SDK team allowed Robert Schroll to express his issues with the tools when developing Beru, the ebook reader. When Filippo Scognamiglio needed help with mouse and touch input, we could grab Florian Boucault and Daniel d'Andrada to provide tips. Having Renato Filho nearby to fix problems in Evolution Data Server allowed Kunal Parmar and Mihir Soni to resolve calendar issues. The list goes on.

All week we've been collaborating towards a common goal of high quality, beautiful, performant and stable applications for the phone today, and desktop of the future. It's been an incredibly fun and productive week, and I'm a little sad to be heading home today. But I'm happy that we've had this time together to improve the free software we all care deeply about.

The relationships built up during these sprints will of course endure. We all exchange email addresses and IRC nicknames, so we can continue the conversation once the sprint is over. Development and meetings will continue beyond the sprint, in the virtual world of IRC, hangouts and mailing lists.

XDA Developer Conference 2014

The XDA Developer community had its second conference last weekend, this time in Manchester, UK. We were asked to sponsor the event and were happy to do so. I went along with Daniel Holbach from the Community Team and Ondrej Kubik from the Phone Delivery Team at Canonical.

This was my first non-Ubuntu conference for a while, so it was interesting for me to meet people from so many different projects. As well as us representing Ubuntu Phone, there were guys from the Jolla project showing off SailfishOS and their handset and ports. Asa Dotzler was also there to represent Mozilla & FirefoxOS.

Daniel did a small Ubuntu app development workshop which enabled us to learn a lot from our materials and process around App Dev Schools which we'll feed back to later sessions. Ondrej gave a talk to a packed room about hardware bring-up and porting Ubuntu to other devices. It was well receieved and explained the platform nicely. I talked about the history of Ubuntu phone and what the future might hold.

There were other sponsor booths including big names like nVidia showing off the Sheild tablet and Sony demonstrating their rather bizarre Smart EyeGlass technology. Oppo and OnePlus had plenty of devices to lust after too including giant phones with beautiful displays. I enjoyed a bunch of the talks including MediaTek making a big announcement, and demonstrating their new LinkIT One platform.

The ~200 attendees were mostly pretty geeky guys whose ages ranged from 15 to 50. There were Android developers, ROM maintainers, hardware hackers and tech enthusiasts who all seemed very friendly and open to discuss all kinds of tech subjects at every opportunity.

One thing I'd not seen at other conferences which was big at XDA:DevCon was the hardware give-aways. The organisers had obtained a lot of tech from the sponsors to give away. This ranged from phone covers through bluetooth speakers, mobile printers, hardware hacking kits through to phones, smart watches & tablets, including an Oppo Find 7, pebble watch and nVidia Sheild & controller. These were often handed out as a 'reward' for attendees asking good questions, or as (free) raffle prizes. It certainly kept everyone on their toes and happy! I was delighted to see an Ubuntu community member get the Oppo Find 7 :) I was rewarded with an Anker MP141 Portable Bluetooth Speaker during one talk for some reason :)

On the whole I found the conference to be an incredibly friendly, well organised event. There was plenty of food and drink at break times and coffee and snacks in between with relaxing beers in the evening. A great conference which I'd certainly go to again.