Thursday, August 20, 2009

Breaking into your own home

So the inevitable happened again. Due to the password policy at work, I have to change my login password every couple of months, which then (in theory) gets propagated to all the computers and services where I want to log in. Except that there's always an exception, and this time it happened to be the Windows XP box I'm temporarily using in my office while waiting for my new laptop. I never log out, so I never noticed that my password there is a few changes out of date. Windows installed some new patches, wanted to reboot, and suddenly I'm stuck at the login screen with no idea what my password was 6 months ago when I set up this computer. It had "duck" in it somewhere, I'm pretty sure, but also some numbers or funny characters...

After racking my brain for a while, I realised that I was locked out. I hunted around for a couple of minutes, and came across this lovely little utility called Offline NT Password & Registry Editor that allows you to blank your existing NT/XP/Vista password. It's a 3MB download for a bootable CD image, and it works like a charm! 15 minutes later I was back in business.

It was exceedingly simple. And it would have been exceedingly simple for anyone with this boot disk to get access to my data. Which just underlines the old security maxim: if someone can get physical access to your machine, your data may well be at risk.

Sunday, August 16, 2009

New Medialab website up

The website for the MIH Electronic Media Laboratory at Stellenbosch University is up and running — go and have a look! We hope that, as more content is added, it will become a showcase for our research.

We're also in the process of recruiting new MSc and PhD students for next year, and there are some generous bursaries and fascinating research topics available. If you're interested, or know of a bright graduate with a BSc, BSc(hons) or BEng that might be, please visit the site for prospective students. We're especially interested in attracting students from South Africa, India and China.

Sunday, May 31, 2009

The Fine Print

My wife recently signed a standard agreement to rent some self-storage space close to where we live. As I read the agreement to see what it entailed, I saw the final (tiny) "Suretyship" clause close to where she and two "Witnesses" had to sign:
We/I, the undersigned, acknowledge ourselves to be familiar with the contents of this lease and bind ourselves to the Lessor as sureties and CO-principal debtors in solidum with the Lessee mentioned in this lease, for the due, proper, and timeous fulfilment of all the Lessee's obligations in terms of this agreement, agreeing that the granting of extensions of time, the release of any security, the variation or alteration of the agreement, acceptance of a compromise or composition or the granting of any form of indulgence shall in no way prejudice the rights of the Lessor herein to recover from us jointly and severally in full, hereby renouncing all benefits arising out of the legal exceptions "non causa debiti, errore calculi, revision of account, ordinis seu excussionis et divisionis, de duebus vel pluribus reis debendi and cession of action" with the meaning, force and effect whereof the Sureties acknowledge the Sureties to be fully acquainted.
Wow, not just a mouthful — a single sentence!

This is what she was expected to sign as part of the routine, "OK, if you want to buy our product, sign here," type of agreements. But how is any non-legal person expected to be familiar with terms like "in solidum", "non causa debiti" and "de duebus vel pruribus reis debendi"? While I appreciate that legal professionals use Latin maxims as shorthand to refer to standard legal principles, there is no way a lay person should be expected to be familiar with them — yet the contract sneakily requires all the signatories (including the witnesses!) to affirm that "the meaning, force and effect whereof the Sureties acknowledge the Sureties to be fully acquainted."

Fortunately, it seems as if the South African courts have recently indicated that signing away your rights without knowing what you're signing for is not on (see, for example, a recent case where an individual lost a car due the negligence of a repair company). But it is still very disturbing that a consumer is expected to know Latin and reverse-engineer a convoluted sentence of legalese, just to enter a simple rent agreement.

Saturday, November 1, 2008

SciPy Sprint 0.7 ZA

We held the SciPy sprint at the Stellenbosch University Media Lab today, and managed to wrestle down a good number of tickets.

Here's the feel of it, to the theme of Monty Python themselves:

Or watch the slideshow here!

The full details of the sprint can be found at the official page.

Thursday, February 28, 2008


Favorite new site: aNobii — it's to bookworms what Facebook is to socialites! I've tried out virtual bookshelves before, with Google Books' "My Library" option being quite good. But where Google's focus is to make it possible to browse and search inside the text, aNobii immerses you in a social network of readers.

Not long after adding your first few books (done by entering their ISBN numbers in batch), aNobii's "matchmaking" system will introduce you to other books you may enjoy — and to other people with likeminded tastes. It's lovely to browse through other people's bookshelves, and inspect books that you might enjoy yourself. It's almost like a huge virtual bookclub.

The social linking is done very nicely: if you strongly identify with a complete stranger's taste in books, you can tag that person as a "neighbour" (someone living close to you in L-space, but whom you don't know in real life). You can then be notify when they update their bookshelves, for example by finishing new books and ranking them on a four-star system.

If you enjoy reading, and enjoy being exposed to new books by word of mouth, you're likely to enjoy this excellent online resource.

Sunday, January 6, 2008

Scanned page to PDF converter

OK, so here's a first code snippet that I found useful. A scan utility that I used gave me a bunch of A4 images in folders, one image per page. I wanted to convert these scanned pages into PDF documents. The excellent reportlab package allows the creation of PDFs from Python; the rest was just globbing and glueing.

The script assumes that each subfolder in the current (or specified) path contains a collection of images that should be converted into a single PDF. It also assumes that the images are named in such a way that sorting by filename will place the pages in the correct order. For each subfolder, a similarly named PDF is created in the main folder.

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
import os, sys, glob

width, height = A4

if len(sys.argv) > 1:
os.chdir(sys.argv[1]) # Change working directory
print "Usage: pics2pdf [directory]"

# Iterate over all the subdirectories of the current directory:
for subdir in filter(os.path.isdir, os.listdir('.')):

pdfname = subdir+".pdf"
ignorelist = []
print "Processing", pdfname, "[",
c = canvas.Canvas(pdfname)

# Iterate over all the possible pictures in the subdirectory:
PicList = glob.glob(os.path.join(subdir,"*"))

for pic in PicList:

try: # Assume the file is a valid image
c.drawImage(pic, 0, 0, width, height)
print os.path.basename(pic),
except: # Didn't seem to be an image

print "]"

if len(ignorelist) > 0:
print "Ignored non-image file(s)",
for file in ignorelist:
print file,
print ""

init 5

Well, at last getting round to it! I've been playing around with the idea of starting a technical blog some time, a place to post random snippets of code or thoughts on software, hardware and engineering. It sometimes feels like such a waste to expend mental energy on, for example, putting together a quick script to do something useful, only to use it once or twice and then shelve it into some dusty folder. Rather put it out in the wild; maybe somebody finds it useful, or maybe someone can give useful suggestions on it.

So let's see how it goes, and whether I have the discipline to update this regularly :)