Mooi Loop, Sir Terry…

Sir Terry Pratchett has passed away1, and the world has thus lost one of it’s bright lights. A person who had managed to get more people to read than Enid Blyton or J.K. Rowling.

Maybe even combined…

Mooi Loop2, Sir Terry…

Terry Pratchett - Enemies

1: I kinda think Death will like to keep him around a while for conversation, though.
2: Afrikaans3 for “Go Well”.
3: My isiXhosa and isiZulu sucks, but that would have been “Hamba Kahle” in both of them…

Wallpaper Mavericks…

I have finally had enough of Mavericks’ shenanigans when it comes to Desktop Wallpapers…

For those not in the know, in OS X Mavericks, Apple has changed the mechanism for configuring Desktop Wallpaper from the venerable .plist to using a Sqlite3 database.

While using the database is probably more robust and easier to integrate, it is not as easy to change the desktop or, even more important from my perspective, to change all your desktops to the same wallpaper.

After some Googling and digging, I finally came up with the following little Python script which I called, reasonably enough, changewall:


from __future__ import print_function

import os, sys, subprocess
import sqlite3

if len( sys.argv ) < 2:
    sys.exit( 'Usage: "%s" file-name' % sys.argv[ 0 ] )

if not os.path.exists( sys.argv[1] ):
    sys.exit( 'ERROR: File "%s" was not found!' % sys.argv[ 1 ] )

desktop_picture_path = sys.argv[ 1 ]
database_location = os.path.expanduser( '~/Library/Application Support/Dock/desktoppicture.db' )

conn = sqlite3.connect( database_location )
print( 'Opened database successfully' )

cur = conn.cursor()
cur.execute( 'SELECT count( DISTINCT display_id ) + 1 FROM pictures;' )
displays = cur.fetchone()[0]

cur.execute( 'SELECT count( DISTINCT space_id ) + 1 FROM pictures;' )
spaces = cur.fetchone()[0]

conn.execute( 'DELETE FROM preferences' )

conn.execute( 'DELETE FROM data' )
conn.execute( 'INSERT INTO data VALUES (?)', ( desktop_picture_path, ))
conn.execute( 'VACUUM data' )

screens = spaces * displays
for screen in range( screens ):
    conn.execute( 'INSERT INTO preferences VALUES (1,1,?)', ( screen + 1, ))
conn.execute( 'VACUUM preferences' )


print( 'Records created successfully' )

subprocess.check_call( ['/usr/bin/killall', 'Dock'] )

Not all that impressive, I’m fully aware, but it does seem to do the job. Using it is simplicity itself:

changewall ~/Wallpaper/funky_wallpaper.jpg

As usual, do with it what you will…

Another Hero Goes to Rest

John Holbrook Vance (28 August 1916 – 26 May 2013) was one of the people that made my youth (not to mention the long years I spent in the military) not only bearable but, at times great fun…

Now, while I am aware that no-one lives forever, it does at times feel like the universe is conspiring to remove all of my childhood heroes from our little rock in the last couple of years. Either that, or I’m getting older than I have realised.

The late, great, Jack Vance will be greatly missed by many. So: so long Jack; and I really think that it is time for me to revisit Lyonesse.

New Year Blues

It’s getting to that time of year again we we have to pause and reflect on our accomplishments (or lack thereof) during the year. Again.

A time to compare where we are, to where we should be, to where would like to be…

And as is usual for most of humanity, we will all most likely decide: Screw that, we’ll try again next year.

Merry Christmas to all of you, and a very Happy New Year.

Dennis Ritchie (1941-2011)

It is with sadness that I’ve heard that Dennis MacAlistair Ritchie, the noted computer scientist and co-inventor/creator of both the Unix OS and the C programming language has passed away.

This is a massive loss, since the man’s work is the very reason for my career.

So long, dmr, and maybe now would be a good time to join the demigodic party…

Geektool is even cooler than I thought…

Hacking away at Geektool I decided to try something else: sending raw terminal escape-codes at it and see how it handled it… In short: even better than I thought. So here is an update to my earlier Geeklet to display a calendar:

ESC="\\\033["; \
printf "\n$( cal| \
    sed "\
        s/^/ /; s/$/ /;\
        /^ Su.*/d;\
        /.*$( date +'%B %Y' ).*/d;\
        s/$( date +%e ) /${ESC}1;37m$( date +%e )${ESC}0m /g;\

I will admit to still using the previous version, though, since I prefer the font bolding in that one.