Jesus and the Rich Young Man (One Size Fits All)

Jesus treated people as individuals. He responded differently to different people. But what would have happened if Jesus had tried to use a one-size-fits-all approach to ministry? Here’s how I imagine Mark 10:17-22 (the Rich Young Man) might have turned out. [ NOTE: if you don’t know the original story please read it first ]

As Jesus was starting out on his way to Jerusalem, a rich young man came running up to him, knelt down, and asked, “Good Teacher, what must I do to inherit eternal life?”

“Why do you call me good?” Jesus asked. “Only God is truly good. But to answer your question, you know the commandments. ‘You must not murder. You must not commit adultery. You must not steal. You must not testify falsely. You must not cheat anyone. Honour your father and mother.'”

“Teacher,” the man replied, “I’ve obeyed all these commandments since I was young.”

Jesus looked at the man, and rose to the challenge. “Really. You’ve kept all of them?”

“Yes Teacher. My parents taught me to follow the laws of Moses.”

“Ok, well how about this? Have you ever been angry with anyone?” asked Jesus.

“No Teacher,” he replied. “To be perfectly honest, my life has been fairly easy. I’ve never had any reason to be angry.”

“What about lust then?” asked Jesus. “You must have looked lustfully at a woman at least once?”

“Well,” said the man, “I’ve felt temptations from time to time, but my parents always taught me that temptation was not the same as sin.”

Jesus frowned. “Ok, I’ll give you that one. But all have sinned and fall short of God’s glorious standard, so I know you’re a sinner.” Jesus paused for a moment, then he smiled at the man. “I bet you’re pretty pleased with yourself for keeping all those commandments?”

“Well I do try to honour God.”

“There, see? Pride! The scriptures say, ‘God opposes the proud but gives grace to the humble.’ So you’re a sinner then! See?”

“Um, I guess so.”

“Good. Well the good news is that I’m going to save you from your sin, so all you have to do is accept, believe and confess. Here, read this prayer.”

“So… if I say this prayer I’ll inherit eternal life?”


“And that’s all there is to it? No hidden clauses or small print? Can I keep my possessions? Do I have to change anything else?”

“What have possessions got to do with eternal life? No it’s all on the inside. You just need to believe in me.”

At this the man’s face lit up, and he went away happy, for he had many possessions.

Posted in midlength | Tagged , , , , | Comments Off on Jesus and the Rich Young Man (One Size Fits All)

Ubuntu on a ThinkPad Helix (x86 Tablet/Convertible)

I’m looking for a new tablet. Over the past few days I’ve had the chance to play around with a ThinkPad Helix. The Helix comes with Windows 8, but naturally, I installed Ubuntu to see how it works on a touch device. Here are my findings.

Ubuntu on a ThinkPad Helix

Ubuntu on a ThinkPad Helix

Ubuntu Desktop vs. Touch

First, a word about Ubuntu. Ubuntu Touch and Ubuntu Desktop are different beasts. Ubuntu Touch is designed for touch devices. It began life as an Android variant, but piece by piece Canonical replaced it with a Linux of their own making.

This article is not about Ubuntu Touch. I would have tried Ubuntu Touch on the Helix, but I couldn’t find any useful instructions about installing Ubuntu Touch on an x86 device. So I installed Ubuntu Desktop (version 15.04, the latest version at time of writing).

Hardware Support

Update 2015-10-09: After playing around a bit more, I have found that everything works fine when I boot up with the tablet plugged in to the keyboard unit, but when I resume from suspend in tablet mode and then reconnect the keyboard unit, the trackpoint works fine but the keyboard does not. It may be related to this bug.

Most of the Helix hardware worked straight out of the box. The track point, touch pad and touch screen all worked, as did the stylus pen, the volume buttons, and the special keys like the brightness adjustment controls. Ubuntu Unity captured the Windows button to bring up its applications menu, and pressing the power button brought up the power options (shut down, suspend, restart). That seemed reasonable, but I decided I wanted the power button to just suspend immediately, which involved using dconf-editor to set  button-power under org.gnome.settings-daemon.plugins.power to  suspend.

The only part of the hardware that did’t seem to do something useful straight off the bat was the internal sensors. In particular, it would be nice if the accelerometer could trigger automatic rotation of the screen when the tablet’s not docked to the keyboard. Based on a bit of poking around, it seems that the accelerometer is detected (the iio devices are visible in  udevadm info --export-db  and under  /sys/bus/iio/devices/), I could read from the accelerometer using commands like  /cat /sys/bus/iio/devices/iio\:device5/in_accel_x_raw, so in theory it should be possible to write a service which auto-rotates the screen. I did find this repo for the ThinkPad Yoga laptops, which had some programs for managing the iio sensors, but when I tried to use them they didn’t seem to notice changes in the orientation. I also found this old software that notices when the tablet is docked and undocked from the keyboard, and rotates the screen when that happens. It doesn’t look at the orientation, it just assumes that if you’re undocked you want portrait mode.


I’ve been using an Android tablet for years and when it comes to usability on a touch device, Ubuntu Desktop still has a long way to go to catch up with Android. Perhaps Ubuntu Touch is an improvement. Did I mention that I couldn’t find a straightforward way to install Ubuntu Touch?

To make Ubuntu Desktop more usable on a tablet, I did the following things:

1. Increase the scale for menu and title bars (System Settings > Screen Display > Built-in Display > Scale for menu and title bars).

2. Adjust launcher icon sizeon my desktop I usually make these as small as possible, but to press them with my fingers they need to be largish (System Settings > Appearance > Look > Launcher icon size).

3. Activate the on-screen keyboard, and configure it to dock to screen edge, auto-show when editing text, and hide when using a physical keyboard (System Settings > Universal Access > Typing to activate it, then to configure, click the notification icon and select Preferences).

4. Make long presses simulate right mouse button clicks, and adjust down the acceptance delay from the ridiculously long default (System Settings > Universal Access > Pointing and Clicking > Simulated Secondary Click).

The on-screen keyboard isn’t as nice as in Android. Sometimes it notices that you’re editing text, sometimes it doesn’t. I think GTK apps tell the system when your focus is in a text box, but most other applications don’t. But you can bring up the on-screen keyboard by clicking on the icon in the notification area.

5. In Firefox, install Grab and Drag, NoSquint, and perhaps Theme Font & Size Changer.

The first add-on, Grab and Drag, will allow you to scroll in Firefox by touching and swiping. Some Ubuntu apps do this automatically with a touch screen (again, I suspect this is GTK being a good citizen), but Firefox doesn’t without this extension. I couldn’t find a similar extension for Thunderbird, but I imagine writing one wouldn’t be difficult.


Out of the box, an Android tablet still feels much nicer than Ubuntu Desktop running on a Windows tablet. But truth be told, running Linux on a tablet wasn’t as painful as I’d imagined. It seems like there are ways to work around the minor annoyances. And I do like the idea of being able to use my tablet to do outrageous things like having two text documents open at the same time, or working on some of my Python projects.

So I haven’t yet decided whether I’ll get myself a Helix (or similar), or whether I’ll go for another Android tablet. But I certainly haven’t ruled out the possibility of Ubuntu.

Posted in long | Tagged , , , , , , | Comments Off on Ubuntu on a ThinkPad Helix (x86 Tablet/Convertible)

PyCon Australia 2015: The Trosnoth Talk

I recently spoke at PyCon Australia. He’s a video of my talk.

I talk about the open source team platformer, Trosnoth, for which I’ve been leading the development team since the project began in 2006. I share some of the lessons that I learnt over the years of managing this project.

Posted in short | Tagged , , , | Comments Off on PyCon Australia 2015: The Trosnoth Talk

Ubuntu: GPG public key not available during apt-get update

I have recently had a problem where apt-get update complained with errors like this (but more of them):

W: GPG error: utopic Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 40976EAF437D05B5 NO_PUBKEY 3B4FE6ACC0B21F32
W: GPG error: utopic Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 40976EAF437D05B5 NO_PUBKEY 3B4FE6ACC0B21F32

A little bit of googling revealed that I should import the keys using apt-key  or y-ppa-manager , but this did not fix the issue for me. In fact, apt-key  assured me that I already had the keys in question:

$ sudo apt-key adv --keyserver --recv-keys 40976EAF437D05B5 3B4FE6ACC0B21F32

Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --homedir /tmp/tmp.HxoG9btVKl --no-auto-check-trustdb --trust-model always --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyring /etc/apt/trusted.gpg.d/rickyrockrat_ubuntu_parcellite-appindicator.gpg --keyring /etc/apt/trusted.gpg.d/sil.gpg --keyring /etc/apt/trusted.gpg.d/webupd8team_ubuntu_y-ppa-manager.gpg --keyserver --recv-keys 40976EAF437D05B5 3B4FE6ACC0B21F32
gpg: requesting key 437D05B5 from hkp server
gpg: requesting key C0B21F32 from hkp server
gpg: key 437D05B5: "Ubuntu Archive Automatic Signing Key <>" not changed
gpg: key C0B21F32: "Ubuntu Archive Automatic Signing Key (2012) <>" not changed
gpg: Total number processed: 2
gpg:              unchanged: 2

Since now, after much searching, I have found a solution, I thought it worthwhile to write an article about it here in the hopes of reducing the time wasted by anyone who hits this problem in future.

For full details, check out the answer on the Ask Ubuntu Stack Exchange, but basically, it seems like what happened is that GPG can only handle a limited number of key stores. By clearing out the trusted keys in /etc/apt/trusted.gpg.d , we reduce the number of key stores by one and things start working again. The downside is that Ubuntu no longer trusts the third party sources that I want it to, but at least it trusts the Ubuntu repositories now!

Posted in midlength | Tagged , , , | Comments Off on Ubuntu: GPG public key not available during apt-get update

Exchanging Work in Progress with Mercurial

The Problem

I work with other people on software projects. Sometimes it would be really handy to be able to exchange unstable work in progress with other developers, without having to commit the work as a permanent changeset in our version control repository.

My Solution

I’ve written a Mercurial extension that lets you do just that. Here’s the intended workflow:

  1. You do some work in your repository. You want to share it, but it’s not ready to commit.
  2. You type hg draft , which stores your work in a draft changeset.
  3. You push your draft changeset to your collaborators.
  4. You do some more work, and type  hg draft  again. This amends the previous draft changeset.
  5. You push the new draft to your collaborators.
  6. When you’re ready, you type  hg commit  as usual, and it replaces the draft changeset with a real one.

Get the Code

I’ve published my code at but before you start using it, there is one caveat: for this extension to work as described above, you need to set up your repository so that changes to history can propagate between repositories. This means you must:

  • enable the (incredibly cool) evolve extension
  • set up your repository to be non-publishing by adding the following snippet to your repository’s  .hg/hgrc  file:
    publish = False

To use my extension, simply get the code:

hg clone ssh://

Then enable it in your  .hgrc  file.

draft = /path/to/tallhg/hgext/

My extension has been tested with mercurial 2.8.2.

How it Works

This extension works by storing metadata which marks your draft commits as work in progress. When further commits are added, this metadata is detected, and the new commit amends the old one.

A Caution

I’ve called the commits this extension creates “draft commits”, but this is very different from the commits being draft phase commits. I realise that this could cause confusion, but I couldn’t think of a better description of what this extension does. If you think of one, please let me know!

Posted in midlength | Tagged , , , , | Comments Off on Exchanging Work in Progress with Mercurial