Stefano Rivera (tumbleweed)'s Website, Blog, collected bits of code, cruft and other stuff.


Bashbot was originally an idea and bash snippet from Jonathan Hitchcock. I took it and bastardised it beyond imagination.

It’s a fully-featured, modular IRC bot.

The modules come in 2 types:

  • Commands are matched by filename. I.e. “bot: foo bar” will run the command foo if it exists.
  • Regex commands are matched by a regex in the file’s first line (commented). So a regex-command beginning with # ^(.*) is( also)? (.*)$ will be executed if you try and set a factoid with “bot: Spinach is a vegtable”

Included modules:

  • announce

That was *camp

I’m now sitting in Arniston, on a horribly slow GPRS connection, after *camp, which was this weekend, at AIMS. It was a BarCamp-like “unconference”, organised by the geekdinner crowd. I put off having the weekend at Arniston for *camp, and for me, I think that was worth it.

The event was really good. I haven’t been very involved in the organising, and didn’t come prepared with a talk (just equipment). At the start, it felt like there were never going to be enough talks to keep us going, but as soon as it started, it began rolling, and continued for 2 days. The talks were varied, from technical, to psychological, to practical. I was really impressed. The quality of the talks was quite high - I was rarely bored (although I did have IRC distractions).

As usual, I had Jonathan Carter’s camera, and videoed everything. I’m going to go home to around 8 hours of video that needs editing, synchronizing, encoding, and uploading to It’ll take a while, guys, be patient.

Today, I got involved with setting up the lab for practical demos. We had 9 PCs lent, and needed Ubuntu on them. Of course, the natural approach is netinstall - I’m familiar with netinstalling Ubuntu, and it is a great way to set up a pile of computers. However, we ran into problem after problem.

  1. We were using dnsmasq (on my laptop) for DHCP and TFTP, but it wasn’t the router. So I set the router DHCP option. This seemed to break dnsmasq - PCs stopped accepting leases and DHCPDECLINED them. I’ve never seen that before. So I had to route through my laptop - no biggie.
  2. AIMS is behind a 400kbps connection, and while thy have an apt-cacher, it seemed badly seeded, and it looked like it was going to take us hours to install, so I went to my car and collected a set of Ubuntu archive DVDs that I happened to have on hand, and loaded them via a cluster of laptops and rsync ;-)
  3. Of course those DVDs didn’t have udebs on them (the debian-installer bits and pieces), so I had to quickly write a script to download all the udebs, and their necessary support structure.
  4. Now the machines netboot installed really fast, but at the very end of the install, it failed, due to some package signature problem.
  5. I ran debmirror, to ensure that my mirror was up to date, and it was. I ran the md5 sum checks, and they passed. I have no idea what the problem was.
  6. Eventually, the lab was installed with 3 install CDs, and then clubbed into shape with clusterssh. 5hrs or so after starting - what a waste of time, we should have started with CDs…

So, lesson for next time, test your netboot setup in advance, don’t assume that a mirror will be in working shape. We should have set up the lab on day one, for use on day 2.

The upshot of this is that I didn’t see any talks today (excepting a practical in the lab, on scribus, once it was up). I’ll have to watch the videos later.

Now, I’m going to enjoy a few days in Arniston, and then come home to graduate.

Multiple IP addresses on Debian

Quick post. If you have multiple IP addresses (i.e. a range) assigned to you server, and you want to listen on all of them (i.e. multiple SSL sites), then rather than using the ancient eth0:1 syntax, you can hack /etc/network/interfaces to use iproute2 properly.

Assuming the IP, with the extra range of (yes these extra ranges often ignore class-boundries):

auto eth0
iface eth0 inet static
    # Extra IPs:
    post-up for last in `seq 110 118`; do ip addr add 10.5.4.$last/32 dev $IFACE; done || true
    pre-down for ip in `ip addr show dev $IFACE | sed -n ‘s@.* inet \([0-9.]*/32\) .*@\1@ p’`; do ip addr del $ip dev $IFACE; done || true

Yes, it’s ugly as shit, but I can’t think of a neater way to do it.

Update: Better solution

GeekDinner meets Linkedin

I’ve finally jumped on the Linkedin bandwagon. Amongst other things, I’ve added a GeekDinner Group.

Graduation isn't straightforward

I haven’t blogged in a while, since exams are now over, and I have less urgent procrastination needs. I maintained an average of more than 1 post / day at the hight of my studying :-(. In fact, I’ve been recovering from exams, and trying to catch up with the rest of life that I had to put on hold all year. And more recently, an insane RSS feed and e-mail build-up from a week of ignoring them while I was catching up with my life.

So, no posts doesn’t mean life has been uneventful. I’ve been:

  • out almost every night last week
  • picked up wall climbing again (thanks Ken) and through it found some people I haven’t seen in ages (Hi Chris)
  • elected the Chairman of CLUG
  • involved in a spat with ICTS (the topic of a future post)
  • spending at least a day encoding GeekDinner videos (using Makefiles to allow encode video in parallel on dual core machines, and using a handful of machines to do the work saves a lot of time), and finally
  • almost not graduating. (the rather ranty point of this post)

This was my third your of an Information Technology BSc (specifically Computer Science and Electrical Engineering). I’ve had good results most of the time, but I’m not class medal material.

In first year, I slept through almost all of my Statistics lectures (3rd lecture in day, after an insanely early start - I was usually exhausted, and well primed for sleeping). Come the end of the year, somehow, I didn’t realise how meagre the exam’s formula sheet was going to be, and failed the course horribly. I swore I’d never do Stats again, making up the points with another, more interesting course. I didn’t get a chance to do this in 2nd year because I failed and had to repeat another course due to bad timing between deadlines and my best friend’s tragic death in a hiking accident.

This year, I had a reasonably heavy course load, with the 3rd year CS courses, and a composite EE course made up of two 3rd year, and a 4th year course. On top of this, I had to fit in something extra to make up Stats. The only extra course I could schedule was… Stats. I spent an afternoon running around, and computing schedules, but there was no alternative.

This time around, I actually enjoyed the Stats - it was (partly) very well lectured, and I already knew the basics of the course-work. I read the textbook, crammed the necessary formulae for the exam, and wrote it, all a monstrous 6-hrs-of-exams day. And that, I thought, was that.

I kept myself busy for the next couple of weeks, and then wondered to UCT on results-day, to see what I’d got. I was top of the (admittedly small) class for my EE, and scraped a 1st in CS, great! Next I head to stats, and I see “DPR” next to my name instead of a mark.

DPR means that I didn’t complete the require coursework. The list of who got DP (Duly Performed), and who didn’t (DPR) goes up a week or so before exams begin. Somehow I hadn’t noticed that I hadn’t got DP (I’m pretty damn sure that I checked the relevant noticeboard, I’m good like that). DPR means don’t write the exam, it won’t get marked, you’ve already failed. But somehow it’d escaped me, and I’d written it, and now I was not going to graduate. I couldn’t believe that I was DPRed, but it was possible - I’d screwed it up before, and could have failed all the tests (I’d hadn’t seen all the test results yet).

So, the next morning, I raced off to see the Stats course convenor. We sifted through paperwork, and found the problem - I didn’t have a mark for one of the tests, and for DP you need to write all the tests. Eventually we found the attendance slip that proved I had written it, which meant either I’d escaped the test venue with my test-paper, or the department had lost it before it was marked. Fortunately, my exam had been marked, I’d passed, and they believed that I’d written the test. So after an agonising day’s wait, I heard that the Head of Department had approved passing me, as if I’d missed that test on medical grounds. I’ve since heard that University policy dictates that the department must take the blame unless they can prove it was me (it wasn’t).


That doesn’t mean everything is solved yet, I was recommended to do an elective in 1st year, that is now no longer sanctioned for my course. It usually causes me hassles during registration, and might come up again now, but I think I can safely assume I’m graduating…

Syndicate content