Latest posts

20 Lines of Python

Querying a Database and POSTing data in 20 lines

I love Python and all its libraries. The HTTP library by the name of requests is particularly awesome.

Note: I have not used any authentication, basic or otherwise, but it's easy enough to add.

StringIO is used because the cvs ...

MySQL Backup Script


date=$(date +%Y.%m.%d)

# echo and exit
function die {
    echo "$1"
    exit 1

# dump per database
function per_db {
    for db in $(mysql -u ${user} -p${pass} -Bse "show databases"); do
        [ ${db} = "information_schema" ] && continue
        [ ${db} = "performance_schema" ] && continue
        echo ${db}
        mysqldump ...

Discovering the Seagate Central


ryant@spitfire:~$ nmap

Starting Nmap 6.00 ( ) at 2013-06-29 13:17 SAST
Nmap scan report for
Host is up (0.0098s latency).
Not shown: 990 closed ports
21/tcp   open  ftp
22/tcp   open ...

Expect the Unexpected


Need to automate an rsync to a fileserver and, unfortunately, required to authenticate using a password.


Use expect...


set timeout 20
set password [lindex $argv 0]

spawn rsync -av --no-p --no-g  /media/ryant/My\ Book/Photo/ user@

expect ...

The Week That Was %U=24

I've always been interested in social causes and have at times even contemplated what it would be like to direct a reasonably extensive corporate social responsibility effort - my lack of organisational skills notwithstanding.

I suppose this stems from me being more intrinsically than extrinsically motivated -- money and prestige are ...

Persistence With SQLite

The Problem-ette

I needed to keep track of up until where in a database table I had already queried. Later queries needed to draw data from that point onwards. For example if I've done the query select id, name, surname from table where id > 255623 and it yielded results ...

Do They Fit?

Do you want to know if the MP3s in that folder will fit on a CD?

No problem.

#!/usr/bin/env python

import audioread
import sys

    files = sys.argv[1:]
    print('Usage: %s <files/glob>' % (sys.argv[0],))

total_length = 0.0
for file in files:
    f ...

Commandline Completion for Fabric

To get a list of functions in a Fabric file you use fab --list. I use Fabric frequently so I thought I'd save myself some time by using bash completion to render fab --list obsolete.

Being a learn-from-example type of person I immediately consulted Google for some precedence. After ...

MySQL Over an SSH Tunnel

The Problem-ette

I need to access a number of MySQL servers which are only accessible via ssh jump boxes, ie. I have to ssh to Box A in order to connect to Box B via SSH or the MySQL client.

This can get a bit tedious.

The Solution

Being able ...

Bind, GeoIP, and Python a Beautiful Soup doth make

The week that was

This past week saw me get a tooth implant. Ouch. You know its bad when the dentist says “close your eyes, we don’t want you blinded by flying tooth fragments”! OMG WTF!

This past week also saw me doing something just as painful as having ...

Keeping IT Simple With

The web framework shootout

There are many Python based web frameworks out there waiting to be discovered, tested, set aside, and even used for something useful. Some argue that there are too many and that what Python needs is a Rails-style killer app. One app to rule them all… Like ...

SQL Converter

The Problem

I had a text file containg MS SQL Server database table definitions and I needed to make it compatible with MySQL. Here’s an example:

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Blecchs]') AND type in (N'U'))

Twisted Exim

Use the source, Luke

The great thing about open source is that you can learn from those who have published code on the 'net. At the very least you can shamelessly plagiarise it and bend it until it looks like something you could use ;-)

Another great thing about OSS is ...