Oct 6 2011

Olson TimeZone Database is under threat – This concerns everyone involved in development or the Internet

Arthur David Olson has methodically maintained the Olson Time Zone Database for the lst 25 years (for free!). You most likely have this database in your computer and use it daily to adjust your computer’s time when daylight savings is in effect (Mac/Linux), or if you run mySql databases in time zone sensitive context, use Java, a mobile phone or run a Linux server or have anything to do with time zones in your applications. In short, its more likely that you do use that database directly or indirectly.

And now Mr Olson along with  Paul Eggert are being sued in civil court by an Atlas making company which asserted copyright on some historical DST changes data in its ACS Atlas which Mr. Olson reference’s as a source. Keep in mind that this is the actual tracking of daylight savings across history, a commonly available piece of information. Also keep in mind that Mr. Olson has maintained this database for the last 25 not for the purpose of making a profit.

I really do think one or all of the major commercial Linux players (who all use the Olson TZ_DATA database) should step up to cover Mr. Olson’s legal fees right now and provide him all the support he needs.

More on that is on Hacker News and in more detail here


Sep 5 2011

Checkadoo – Ad-hoc throwaway check lists without the fuss.

Introducing: http://checkadoo.com

I needed a quick way to share check lists with myself and others. Basically I needed the equivalent of dpaste.com for creating tickable check lists. No accounts, no logins, no big forms. Just quick and dirty check lists that allow me to tick items off.

So in the spirit of making stuff happen, I made it happen as a quick project which I’m now brining on line. It took less than 8 hours to create in total, from start to finish, including coming up with the name and drinking coffee.

The idea is simple: Enter your check list items, each separated by a new line (enter key). Each line corresponds to a tickable item. Submit, and share the link with whoever.  Lists can be made public and will the latest public lists will feature on the home page. You can also set an expiry time for your list if you don’t want it to live forever.

Checkadoo can be used for quick shopping lists to tick off in your clever phone, team to do lists that you can forget about the next day, personal check lists for forgetful people and anything else that might merit a tickable list of things.

I’m interested to see traffic patterns for this kind of tool, and I’ll try to report on them when I have the data. I did place an AdSense ad which I hope will cover the hosting costs.

The Stack

I wanted an excuse to try out Tornado web server and see what it’s all about. So Checkadoo is written in python, runs on Tornado and uses the excellent mongoDB for storing the check list data. There’s a sprinkle of jquery for the UI, as well as some fonts from Google’s web font library. Its all pretty simple, small and lean.
Unfortunately there wasn’t a compelling use case to use Tornado’s asynchronous features but maybe that will change as time goes by.

Comments and criticism will be appreciated.

See it here:


Aug 17 2011

RightContext is now on github

Finally created my first github repo for RightContext:


There are over 140 comments in the RightContext page with lots of comments and improvements. I don’t have the time to add them all and hopefully someone will pick it up from there and move it forward.



Jul 23 2011

A test environment from (really) old machines. An exercise in pragmatic recycling. Part 2

Out of the original list of machines, one turned out to be just too old (HP Pavilion), and one was too sick and kept crashing (Spirit). They were cannibalised without mercy.

However, I’m glad to say that the dual core Pentium 3 (crow) works superbly running trac, nagios, postgres and a front end to out test environment. It performs quite well for a pentium 3 machine. The only failure it suffered was a power supply failure which was quickly replaced from one of the 2 defunct machines.

The AMD machine (Robin) and the Pentium 4 (Daredevil) runs worker processes of our application, act as file servers and backup machine.

And the old Thinkpad is very happy being a constantly on monitor of our RabbitMQ instance.

The only caveat is that none of these machines can run 64 bit applications which is restrictive for some applications. But considering they are test environments this is not too much of a problem. At least not yet.

All in all it seems like this was a great success. Old computers were saved from the skip and given a new life and I proved that age is just a number…

Jul 18 2011

A test environment from (really) old machines. An exercise in pragmatic recycling. Part I

I’m working on a serious business application running on a group of fast quad core servers with many gigs of ram. As we add more machines into this party of servers I was thinking if perhaps I can reuse a number of very old desktops I have at home and construct not only an in-office staging/test environment but also one that could run support systems and participate in the load of the hosted machines when required by spinning up worker threads to process whatever it is our application processes. And to top it up we’ll use one of these machines as a front end for Nagios while it monitors the hosted machines via the NRPE add-on.
This would not only save up a good deal of money in hosting costs every months but would provide us a test environment in house we can abuse while also saving some old hardware from the skip or the dust ridden hell of ‘under the stairs’.

This is an experiment and this is where it starts. I’ll try to document how it all goes and if this works out well in the end.
These old machines are seriously geriatric. None goes to 64bit, and for these machines 1GB of ram is considered a treat. Some of them aren’t even worth their scrap metal.

Here is the list of machines, some rough specs and while we’re at it lets assign an internal host name to each so we can refer to them easily later (the theme is superheroes):

  1. HP Pavilion 6430 AMD-K6 266 MHz, 64MB of ram. No network card. No disk space to speak of. Won’t even accept a USB keyboard
  2. Spirit: AMD Duron generic computer constructed from parts I had lying around.
    600Mhz , 256MB of ram.
    2x 20GB drives
    OS: Debian 6
  3. Robin: AMD Athlon
    1GB of ram, 20GB drive
    OS: Debian 6
  4. Crow: Dual Core Pentium 32x 700Mhz cpus,
    500MB of ram,
    1x 20GB drive,
    2x 8GB drives
    OS: Debian 6
  5. Daredevil: Intel Pentium 4  (my former music studio machine decommissioned at 2002)
    1.7Ghz, 1GB of ram. SCSI drives. 20bit Audio card (it was hot back then, honest)
  6. Comedian: IBM Thinkpad 560Z laptop.
    64MB ram, 4GB drive OS: Damn Small Linux

One machine will be assigned a public IP while the others will reside in a private subnet. Each box will be assigned a task based on its abilities to perform it.

To be continued…

Dec 31 2010

A very BIG Fail

I have nothing to say, its just a (very) big fail…

A big fail, somewhere in London

Sep 18 2010

Upgrading from RabbitMQ 1.8 to 2.1

RabbitMQ 2.1 has a new disk based persistor which solves the major problem I and some others had with 1.8 where too many messages kill a rabbit instance if the server didn’t have enough RAM to accommodate. I have a quick script that creates my user and permissions which I’ve used before when upgrading or setting up new servers. However my user was refused access to his queues even though the same set_permissions command worked fine on 1.8
One caveat when upgrading to 2.1 is that the set_permissions call sets scope to “client” by default which caused all my requests to be refused. All it took was adding “-s all”. So, future Googlers, the set_permissions command is:

rabbitmqctl set_permissions -p myvhost -s all myuser “.*” “.*” “.*”

Jul 15 2010

Installing Python 2.6/2.7 on Debian Lenny

Just a quick note to Google-eyed installers of Python who can’t get python to start after compiling it from source. Debian 5 ships with Python 2.5.x and complains about libpython after you install 2.6 or 2.7. The solution is very simple and quick:

Create the following 2 symlinks to sort yourselves out:

ln -s /usr/local/lib/libpython2.6.so.1.0 /usr/lib/
ln -s /usr/local/lib/libpython2.6.so /usr/

If you’re on a 64 bit OS replace /usr/lib/ with /usr/lib64/

My full setup script for Python including threads etc is:

# as sudo / root:
wget http://python.org/ftp/python/2.6.4/Python-2.6.4.tgz
tar -xvzf Python-2.6.4.tgz
cd Python-2.6.4
./configure –with-threads –enable-shared
make install
# fix libpython2.6 problem
ln -s /usr/local/lib/libpython2.6.so.1.0 /usr/lib64/
ln -s /usr/local/lib/libpython2.6.so /usr/

Aug 7 2009

Validating textarea elements using Dojo and Dijit.forms

I’ve been looking for a dojo textarea (dijit.form.SimpleTextarea) that supports the same validation as dijit.form.ValidationTextBox but all I could find is other people looking  for the same thing.
So I’ve come up with this solution, which works well. Its basically a simple extension of SimpleTextarea, with the ValidationTextBox mixed in before it (its important to make sure ValidationTextBox is used before the SimpleTextarea otherwise this won’t work). I overrode the validate, onFocus and onBlur methods to force the popup of the invalidMessage.

To call this, use:

<textarea name=”field_name” rows=”4″ cols=”80″ dojoType=”ValidationTextarea” required=”true”></textarea>

You can also add other validation attributes you’d normaly use in ValidationTextBox, like regExp to validate based on a regular expression.

The dojo component:


        invalidMessage: "This field is required",

        postCreate: function() {

        validate: function() {
            if (arguments.length==0) this.validate(true);

        onFocus: function() {
            if (!this.isValid()) {

        onBlur: function() {

Jul 19 2009

Using Windows for anything more serious than playing games is…

Using Windows for anything more serious than playing games (i.e., business) is like sending James Bond on an uber-mission but instead of Q’s gadgets, giving him a free run at the Fischer Price shelf in Toys R Us…