Stavros' Stuff

Angry rants of programming and other things.

How easyjet screws you over.

A month or so ago, my girlfriend decided to come see me, so I booked her a ticket online. We decided to go with easyjet as they were quite a bit cheaper, paid the 240 euros and were happy about it.

Cue next month, the day comes, my girlfriend goes to the airport all excited about coming over and easyjet tells her that her name is not the same as the first name listed in her ID card. I had used he

Continue reading…

Forwarding ports on Linux.

After spending the better part of an hour trying to forward a port in Linux using iptables, here’s what you should do and what you should remember not to do.

This technique should work on any distro that has iptables, such as Ubuntu, Debian, Fedora, Red Hat, RHEL, Gentoo, etc. Here it is:

As a first step, enter the following rules in your iptables:

Continue reading…

Optimizing python with Cython

Today I had to write an assignment for my Evolutionary Algorithms course, which was to implement a genetic algorithm to solve the Traveling Salesman Problem. I wrote the Python code, it worked well but it took a while to find a good solution with 100 cities, and I realised it would be a few days before I could get a solution for the dataset with 3000 cities. I definitely needed to speed up my prog

Continue reading…

My experience with

A few days ago, I tried to switch to BuySellAds to do my advertising. I figured that if I could get enough money to give the server a bit more memory, everyone’s experience would be improved. You may also have noticed that I changed the site’s domain from to

I tried to join the site a week ago and they turned down my application. When I asked them, they said that I

Continue reading…

Thomson/SpeedTouch routers and WPA keys

In case you didn’t know, the default WPA key in Thomson/SpeedTouch routers is generated from the router’s serial. By some strange coincidence, so is the router’s SSID, which means that if you know the SSID (which is public knowledge), you can brute-force the serial.

There are programs to do this already, but they were not future-proof or open enough to work now, so I wrote a small Python script t

Continue reading…

Custom model field validation in Django

These days I am trying my hand at a rewrite of Dead Man’s Switch, to add more features and generally improve the service.

One of these features was being able to add multiple emails in the “recipients” field, and I wanted to do this as cleanly as possible, so I decided to create a Django model with custom validation. This was not immediately obvious, as the docs

Continue reading…

Hard disk/partition migration in OS X and Linux.

Well, I just got an Intel X25-M 160 GB SSD for my laptop (a MacBook), and I wanted to migrate all my partitions (I was triple-booting OS X, Ubuntu Linux and Windows 7) to the new disk.

This turned out to be less than a breeze, since there are a few caveats and the entire process takes time, but I will detail it here and maybe save some of you some time.

**WARNING: Don’t try any of this if you do

Continue reading…

GitHub and open source development

A while ago I stumbled upon GitHub, which calls itself a “social coding” website. Initially, it seemed to me a code repository like all others (Google code, Launchpad, Sourceforge, etc), but using it more and more I came to realize there’s a pretty interesting twist to it.

You see, with the advent of distributed VCSes, people don’t need to work on a central server any more. T

Continue reading…