Thursday, November 30, 2006

Edgy Eft

Today I set out to install the latest version of Ubuntu, Edgy Eft (6.10). I've been an Ubuntu user since Warty Warthog (4.10) and a long time Debian user before that. I'm continually impressed with how they take the Debian base and polish it so well. I've always told people that Ubuntu "is like Debian with a better package set".

Since Dapper Drake (6.04) Ubuntu has had a new installer. It is more or less just an application that runs inside of a Live CD. The organization and feel of it is very similar to it's text based counterpart. I'm all in favor of a GUI installer but very disappointed with Ubuntu's. This post will detail the downfalls of it.

For the record, here is a summary of the hardware I was installing on:

  • IBM Thinkpad R51

  • 512MB PC2700 RAM

  • Intel Pentium M 1.5GHz CPU

  • Intel Pro Wireless 2200 a/b/g


  • 40GB Hard Drive

Wednesday, November 22, 2006


I've found out from a few people that Thanksgiving in the US is apparently a week long event. An online radio show I listen to is cancelled this week because of it and many others I know are not working this week.

When did Thanksgiving become a week long event?

Monday, November 20, 2006


Off and on for the past year I've been thinking off and on about getting a degree. Dave tells me that I should be in the BSD program and I know a few other people that think I should be at a University working towards a Masters. These thoughts cross my mind almost daily. I flip-flop on the issue for a couple reasons.

Money is the big one. Obvious, I know, but important. I am already indebted to OSAP -- and not a small amount. Every time I think about going another 30 or 40 thousand into debt I cringe. I have some money in an RESP but that is not going to last much longer. OSAP has recently told me that I'm in overpayment, too. I have a feeling I will be getting less and from them as time goes on, I will likely make more in 2007 than in 2006. So far I've avoided becoming the poor student who lives on ramen noodles and mustard sandwiches and I do _not_ want to become one. I also do not want to be paying of student loans until I'm 40.

Time is another big concern for me. By the time I've got my Diploma I will have been in school for 24 months straight. I will need at minimum an additional 4 semesters to get a Degree. This would probably be over the course of 2 full years. To get a Masters there would likely be 2 *more* years. I'm not sure I want to be in school until I'm 25.

I thought there was more reasons than just those two but it looks like that's it. I know I am academically capable of acheiving whatever I set forth to do...but in my head time and money are both really big barriers. I'm trying to gain a more balanced perspective on the situation by talking to people who *have* spent considerable time and money on school. People tell me that graduates with Degrees have a much higher starting salary. Would it be enough to get my loans paid off in a reasonable amount of time? Another advantage of a Degree is that I would probably be able to teach later on in my career if I wanted. Teaching is something I've been thinking about for nearly a year now. I don't think I'd want to do it right away, if at all, but I don't want to block myself from having the opportunity though.

Input, anyone?

Tuesday, November 07, 2006

"It's Frozen" -- The Story of My Day

I just went for my break to grab dinner.

First I wanted a veggie burger -- 20 minute delay because they are all frozen.
Then I wanted a pita with hummus -- the hummus was frozen!

Who the hell shuts down their kitchen at 5pm.
*grumble grumble*

Monday, November 06, 2006

FSOSS 2006 -- Now with more freedom!

I've just finished converting all of the video and audio from the Seneca Free Software and Open Source Symposium to Ogg Theora and Ogg Vorbis respectively. They are in the process of being mirrored right now. Check this page in a day or two to download them.

Friday, November 03, 2006

More Unit Testing

bhearsum@wesley:~/projects/mozilla/buildbot/buildbot-bonsai/buildbot/test$ trial

Ran 9 tests in 0.061s

PASSED (successes=9)

So I've finished my first set of test cases, rejoice!

When I started writing them I thought it would be really easy, I didn't expect to spend more than a few hours on them. Boy, was I wrong. It's been over a week since I started and I probably spent 8 to 10 hours total on a 181 line file. I received help and advice along the way from Rob Helmer for which I am much appreciative.

Problems I encountered

  • My original code was more or less untestable

  • Python regular expressions were confusing

  • My original code used a mixture of exception and return values for error reporting

  • Comparing two objects by their data, _not_ their references

Very quickly I decided to do rewrite of the BonsaiPoller module. It was untestable, confusing, and just plain ugly. I had been planning to do a rewrite becausue of the ugliness alone, so it wasn't hard to reach this decision. This also gave me a chance to attempt some test-driven development. I was looking at _some_ of the old code while writing the test cases but by the end the BonsaiPoller and BonsaiParser worked quite a little differently internally. For reasons of simplicity I decided to keep the interface the same.

I found much of the test case writing very tedious. Just inputing all the data I needed was a chore. I thought it might be easier to input one "good" piece of data and base all of the broken ones off of it. This worked well enough while using the replace() method to do simple substituition but as soon as I needed regular expressions I was in a world of hurt. For some reason the Python developers seem to have decided that they don't want regular expressions as a built-in part of the language. For the life of me I don't know why. I was stuck carrying around a 're' (regular expression) object for most of the regular expressions I used. Compared to how they work in Perl it's a complete pain in the ass. Observe:

import re

data = "<blah><ci><f></f></ci></blah>"
myre = re.compile("<ci.*></ci.*>", re.DOTALL, re.MULTILINE)
newdata = re.sub(myre, "", data)


$data = "<blah><ci><f></f></ci></blah>"
($newdata = $data) =~ s/<ci.*><\/ci>//;

Not such a big deal when doing one or two, like I was, but if you're doing heavy text parsing this would be an ugly nighmare.

In my original code I used a lot of 'return True' and 'return False' to indicate when there was no more data. Seeing as python is object oriented and throws lots of exceptions I wanted to be consistent. This made much of my code a _lot_ cleaner and it has a nicer "feel" to it. There's one part I'm still not happy with though.
Here's the code when I was using True/False:

data = BonsaiResult()
while self._nextCiNode():
ci = CiNode()
ci.log = self._getLog()
ci.who = self._getWho() = self._getDate()
while self._nextFileNode():
fn = FileNode()
fn.revision = self._getRevision()
fn.filename = self._getFilename()


return data

And with exceptions:

nodes = []
while self._nextCiNode():
files = []
while self._nextFileNode():
except NoMoreFileNodes:
except InvalidResultError:
nodes.append(CiNode(self._getLog(), self._getWho(),
self._getDate(), files))

except NoMoreCiNodes:
except InvalidResultError, EmptyResult:

return BonsaiResult(nodes)

I tried to think of a way to use exceptions cleanly with while loops but drew blanks. If anyone can think of a way to improve the above code please let me know! The function works fine, however, so I shouldn't worry so much.

The last problem I ran into was comparison of my BonsaiResult objects. I didn't have this problem before writing the test cases because there was no point where I needed to compare them! This part wasn't too difficult once I figured out what I had to do -- but that took awhile. I was considering pulling the __cmp__() method before creating a diff but I don't think it hurts to leave it in.

Overall I am very pleased with my test cases and new BonsaiPoller module. As soon as I get the energy I will be submitting it to Brian.