Spin - Robert Charles Wilson

Engaging and beautifully orchestrated. The plot turns are revealing rather than shocking. Throughout the story, there is a very pleasing linkage between earlier details and later events. Chekov's guns are each fired.

Read more

The Devil's Waters - David L. Robbins

This is a fun, gripping special-ops military adventure. I liked the way Robbins told similar parts of the story from two characters' perspectives, while still keeping the plot developing and the action going.

Read more

Boneshaker - Cherie Priest

Boneshaker is an intriguing steampunk story with a strong female lead. Character development is full enough to fulfil the purpose of the narative, without detracting from the pace of this adventure story. Use of steampunk technologies is carefully reined in, with no exciting props dropped in at the last minute to save the day.

Read more

On The Extinguishing Of URLs

In a dimly lit room that smelled of solder, I peered into a CRT monitor. The Internet was growing up, Textism was a cool blog, but Dean Allen was yet to publish his first F-bomb. Business websites were changing publishing technologies with reckless abandon, and the links the world made to their pages were becoming outdated.

Tim Berners Lee wrote Cool URIs Don't Change back in 1998, but now Zeldman was saying it, and Gruber was probably sneering at it, so the permanent link was here to stay. Bloggers left their first posts up for posterity, 404 Not Found pages made smug references to their visitor's lack of typing prowess. URLs containing session IDs made the cognoscenti roll their eyes. I was sold.

Fast forward a decade, plus loose change, and the Internet is a thriving beast with tendrills in every part of life. Big business caught on to a good handful of web best practices, and is happily using mod_rewrite to keep their ducks in a row and the pages loading. I've spent the decade tooling around with some of the web technologies, watching my family start to grow up and considering what the Internet of ...

Read more

Decorators: A neat way to modify functions

In Python, decorators are a construction that help reduce boilerplate code, enhance the maintainability of our code and address the separation of concerns. A decorator is a statement just above the function it decorates. Here's a simple example so you can understand what I mean:

def heading1(func):
    Define the decorating function - this wraps the return value of the 
    string in html heading tags. Don't actually write html like this - it is a
    silly idea.
    def wrapper(*args, **kwargs):
        return "<h1>" + func(*args, **kwargs) + "</h1>"
    return wrapper

# Use the decorator here, before the function definition.
def subject():
    return "Decorators: A neat way to modify functions"

print subject()
# Output is "<h1>Decorators: A neat way to modify functions</h1>"

That seems very neat, but this is a simple way of writing something complicated, so there are some kinks to iron out. The first is that in a generally applicable decorator, the decorating function must be able to accept an arbitrary argument list (meaning any arrangement of arguments and keyword arguments). The issue with this is that the resulting decorated function takes on the signature of the decorating function, so introspection of the function tells you that it accepts ...

Read more

Ubuntu home server: Notifications by email

This walkthrough tells you how to provide an email service to daemons on a home server so that it can send emails to a server admin's Gmail account.

Key: Actions look like this, results look like this and commands you enter on a terminal look like this. Replace [my_username] with your login on this server e.g. andrew. Replace [external_FQDN] with the domain name that you use to access your server from outside your local network. (FQDN is Fully Qualified Domain Name.) Replace [gmail address] with your normal email address. This should work just as well for non-gmail addresses, but it's a useful distinction to show we'll be sending mail outside our local network.


  • Computer running Ubuntu (This was done on 10.04, but it's fairly standard stuff)
  • Domain name and DNS provider who can make this work - e.g. dyn.com

sudo aptitude install postfix

Postfix installs
Postfix starts its configuration gui

Select defaults for:

  • General type of mail configuration
  • System mail name

sudo dpkg-reconfigure postfix
Postfix starts its configuration gui

Select the following options:

  • General type of mail configuration: Internet Site
  • System mail name: [external_FQDN]
  • Root and postmaster mail recipient: [my_username]
  • Other ...
Read more

Sansa clip volume problem

I recently updated my Sandisk Sansa Clip firmware and found that the volume was dramatically reduced.

One of the key reasons for leaving behind my iPod Nano was that it was rather quiet. Now, before you tell me how I should be looking after my ears, I should say that playing music was just fine. However, I listen to a lot of podcasts and the audio level is often rather low — hence the need to pump up the volume.

Now, it seems that the E.U. have called for a limit of 80dB on the volume of mp3 players. The only sensible way to implement this is to limit the volume scale on the device so that the normal volume of music is restricted to 80dB. This makes my podcasts really quiet!

The solution, for the Sansa Clip, is very easy:

  1. Turn on your Sansa Clip
  2. Make a note of any settings you would like to keep (we're going to reset them in a minute)
  3. Select 'Settings' from the main menu
  4. Select 'Reset All'
  5. Select 'Yes'
  6. Select your language of choice (English for me)
  7. Select 'Rest of World' as your region
  8. Optionally:
    • Scroll through the settings menu to 'Volume ...
Read more

Removing Landscape advert from Ubuntu login

To remove the text that says: “Graph this data and manage this system at https://landscape.canonical.com/” while keeping the useful system information, edit the script that puts Landscape information into the message of the day (MOTD):

sudo nano -w /etc/update-motd.d/50-landscape-sysinfo

The last line currently reads:

Change this to say (on one line):
/usr/bin/landscape-sysinfo --exclude-sysinfo-plugins=LandscapeLink
Save the file (Ctrl-X, Y, Enter)

Test this by running:

It should look like:

  System information as of Tue Nov 24 13:28:10 GMT 2009

System load: 0.0 Memory usage: 37% Processes: 99 Usage of /: 22.5% of 12.92GB Swap usage: 0% Users logged in: 1

Read more

Can't run Crashplan desktop under Ubuntu

I've installed Crashplan on my Ubuntu server (it installed its own JVM) and now I'm trying to start the Crashplan desktop client using X11 forwarding. I get:

$ cat /usr/local/crashplan/log/ui_error.log
com.backup42.desktop.CPDesktop main
SEVERE: Failed to launch CPDesktop; java.lang.UnsatisfiedLinkError: no swt-pi-gtk-3448 or swt-pi-gtk in swt.library.path, java.library.path or the jar file
java.lang.UnsatisfiedLinkError: no swt-pi-gtk-3448 or swt-pi-gtk in swt.library.path, java.library.path or the jar file

Solution: Install Java. Specifically the JRE version 1.5. Unlike this report here it has nothing to do with 32/64 bit conflicts, because it's a 32 bit machine. If you don't want to install Java, and its associated clutter, then you could try following the advice in the Crashplan readme file about running the UI locally and connecting to the remote crashplan service via the service port:

Remote GUI Config of CrashPlan on a shell account: What if you have a remote shell account on a box that has SSH access, but no X windows interface or GUI? We're going to show you how ...

Read more

Google Chrome OS for Aunties

As a techie type, my ears pricked up when I heard Google announce their intention to release an operating system. I like noodling around with new software when I get the chance, but my main interest in Google's Chrome OS is not for me. It's for people for whom the phrase, "Open Explorer and go to your Documents folder" is filled with intrigue and mystery.

These are the relatives and friends who frequently get themselves into trouble with viruses, malware and trojans because they view the Internet with innocence and optimism. I'm not at all sure that Google Chrome OS will help them find their "missing" documents (although if any company on Earth could, surely it would be Google) but this caught my eye:

And as we did for the Google Chrome browser, we are going back to the basics and completely redesigning the underlying security architecture of the OS so that users don't have to deal with viruses, malware and security updates. It should just work.

That would be worth its weight in gold. Modern operating systems make a real effort to ensure common tasks are quite easy to perform, but slip up, or stray ...

Read more