The Bristol Two Towers Running Challenge

Fancy a running challenge around Bristol that’ll test your legs and your navigation? All you have to do is touch both Cabot Tower and Troopers Hill Tower (er, chimney) and finish where you started.

Troopers Hill Tower
Cabot Tower

The rules are pretty simple:

  1. You have to touch both Cabot Tower and Troopers Hill Tower. Any order.
  2. You must start and finish at the same place (of your choice).
  3. No pausing of your watch (for traffic etc.).

If you take on the challenge, let me know in the comments and I’ll add your results to the table.

Leaderboard:

Date Name Time Route
10th March, 2013 Matt Burns 54:10 GPS
2nd August, 2012 Justin Ainsworth 54:54
13th October, 2012 Neil 1:08:33 GPS
13th October, 2012 Rob 1:09:06 GPS
13th October, 2012 Mike 1:09:14 GPS
17th February, 2013 Steve Knight 1:18:00
25th September, 2012 Olly 1:26:29 GPS

How to install Google Voice

Oh jeez, really? A blog post about doing something so easy? Well, yes because it took me about an hour of messing around and so if this helps save one person from the pain, then it’s worth writing. If you’re in a rush or already bored, jump to the short answer.

If you use gmail, you may see the option in the Chat widget to “Call phone”:

Call phone link

Great. Sounds fun, let’s try it:

No plug-in installed

Oh dear. We don’t have the plug-in installed. We are told “Please download the voice plug-in to make a call.”

Here comes the problem. The link takes you to a download page that has javascript errors preventing your from completing the download:

Bad js

Refused to display document because display forbidden by X-Frame-Options. Uncaught TypeError: Object [object DOMWindow] has no method ‘onInstallButtonClicked’

Hmm, ok, what next? May I suggest at this point you don’t waste your time trying a different browser, then a different operating system, then a different machine. It’s stupid, you’re not thinking clearly. Take a break and drink some water.

The problem was with the initial link: http://www.google.com/intl/en-GB/chat/voice/. (I assume you will get a different link depending on your language/location.)
 
Thankfully, a working page does exist, you just have to find it. https://www.google.com/chat/video. Just go there, the page looks different, has no errors, and allows you to call people without resorting to Skype.

Passing your credentials in order to deploy to Google App Engine with Ant

If you use the example ant script provided by Google you’ll face the following error:

Your authentication credentials can't be found and may have expired.
Please run appcfg directly from the command line to re-establish your credentials.

Sure, you can run appcfg.sh from the console, and login and all will be fine next time. Well, for 24 hours before your credentials are booted from the cache.

Here’s my ant target that does the same thing but takes the credentials interactively using the input task.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<target name="deploy-app" description="Uploads and deploys the application to App Engine.">
    <input message="Enter email" addproperty="gae-email"/>
    <input message="Enter password :- " addproperty="gae-password">
        <handler type="secure"/>
    </input>
 
    <!-- Call dependencies here rather than with 'depends' attribute to get input first -->
    <antcall target="test" />
 
    <java classname="com.google.appengine.tools.admin.AppCfg" inputstring="${gae-password}"
            classpath="${sdk.dir}/lib/appengine-tools-api.jar" fork="true" failonerror="true">
        <arg value="--email=${gae-email}" />
        <arg value="--passin" />
        <arg value="update" />
        <arg value="war" />
    </java>
</target>
<target name="deploy-app" description="Uploads and deploys the application to App Engine.">
    <input message="Enter email" addproperty="gae-email"/>
    <input message="Enter password :- " addproperty="gae-password">
        <handler type="secure"/>
    </input>

    <!-- Call dependencies here rather than with 'depends' attribute to get input first -->
    <antcall target="test" />

    <java classname="com.google.appengine.tools.admin.AppCfg" inputstring="${gae-password}"
            classpath="${sdk.dir}/lib/appengine-tools-api.jar" fork="true" failonerror="true">
        <arg value="--email=${gae-email}" />
        <arg value="--passin" />
        <arg value="update" />
        <arg value="war" />
    </java>
</target>

Obviously, if you want to run this target from your CI server then you’ll need to populate the email and password properties in some other way.