Build Light

A build light is rather a new (?) thing teams do to indicate their software build/test status. It has become very common in Agile teams. I did one for our project although not entirely Agile but it indicates the status of our builds being made in our in-house build server.

Read more about it in wikipedia:

I purchased the light from which sells them very expensive! A USB RGY LED light (  costed me (our project) around 120 AUD to reach Sydney from US! Quite an expensive light!

If you are into electronics you should be able to make one easily I suppose. I am not really a hardware person and also have no time for it.

Anyway the light arrived quickly with no documents attached but everything can be found online. In Windows there is a command line application “USBCMDAP.exe” that can quickly turn it on:

USBCMDAP.exe 0 0 101 12 1 0 #green on
USBCMDAP.exe 0 0 101 12 2 0 #red on
USBCMDAP.exe 0 0 101 12 0 3 # all off

my build light

Now all you need to do is to read the status of your build/test/project/whatever and turn this on/off accordingly.

There are drivers for different OSes and hardware information in their website if you want to get more serious.

If you found a similar light but cheaper (together with software) then let me know!

Starting with Fabric

Fabric is a Python module for system administrations. It can be considered a tiny Puppet. I needed to gather some info about remote servers, etc without installing an application and I was looking for a Python one that I found this. See more information on

It is very nice for Python lovers as you can write your scripts in Python…

It is almost well documented but the problem I had with its HelloWorld was that it failed at the first run in Solaris which was annoying (see below why)

Anyway, These are the points I found the hard way. They either were not in the documentation or were deep hidden:

  • By default run() method calls “bash -l -c” to execute commands. In Solaris there is no -l so you need to change this default by setting: = ‘/bin/bash -c’
  • Default script file name should be and run it with the fab command.
  • List of host names can be set in env.hosts=[…] as a list or passed in to a method using @hosts([…]) annotation
  • Not sure if we can use a jumpbox (tunnel through) in version 1.4. It seems available on 1.5 that I haven’t installed yet. My requirement is for A to ssh to C where the connection is through B as A can only connect to B and B can ssh to C and A cannot directly ssh to C (A->B->C)
  • fabric module depends on ssh and crypto modules to name a few.
  • You hide execution and outputs by:

fabric.state.output[‘running’] = False
fabric.state.output[‘stdout’] = False

In 1.5 you can use hide() method. There is a bug on hide() in 1.4.

reStructuredText Hello World

This is a great tool for creating html pages and presentations and is supported in many languages (I have played with Java and Python tools). This is a Python rst tool:
This is the actual content

- a
- b

1. a
2. b