It’s been a long time..

Wow, it’s been a long time since I have posted. So here is a grab bag of what has been going on.

The last semester of my undergraduate degree is almost over. Less than two weeks left.

I handed in my undergraduate thesis last week; the presentation is this Tuesday. Fortunately, I was able to get the main work of the project done a couple of weeks ago which left me with lots of time to write the final report. This is good because I am a slow writer. At some point I’ll probably post a PDF version of the report here. If you are considering doing an undergraduate thesis I certainly recommend it. It is really great to be able to work on something personally interesting and get credit for it. Of course that is the catch, if your not interested in the topic, it is probably very hard to force yourself to do the required work.

After the thesis presentation on Tuesday the only course work I have left is two assignments: one for distributed systems and one for cryptography.

Also on the university front, I received my acceptance to the MSc program a few weeks ago.

Starting my MSc in September will be exciting but for now I’m just looking forward to four months with no homework. I’m pretty much at the burnout point.

One goal I have for the summer (besides being outside a lot) is to catch up on my reading. I tend to get quite far behind during the school year. In order to catch up I have to read: 6 issues Communications of the ACM, 5 issues of Linux Journal, 2 issues of IEEE/ACM Transactions on Networking, 5 issues of Queue and a few other miscellaneous magazines. Plus all of the unread books that have been accumulating.

And of course, some blogging!

Blog spam

The blog spam on my site has gotten so bad I decided to use WordPress 1.5’s new word black list feature. It seems that 90% of the spam I get is for online casinos. These posts always contain either “texas holdem” or “poker” so I have black listed “holdem” and “poker”. This is a pretty big stick that I don’t want to use but constantly deleting spam in the moderation queue is getting quite annoying.

LQL# HTB control

Now that LQL-Sharp has been released I thought I should put together a quick little demonstration of just how cool it is.

I have created a extremely simple GUI control that can modify the rate and ceiling parameters of a HTB class. This control should really subclass Gtk.Widget but it serves its purpose as is.

TC HTB Control

using System;
using Gtk;
using LQL;
class HTBControl {
	private LQL.ClassHTB klass;
	private LQL.Con con;
	private Gtk.SpinButton rateSpin;
	private Gtk.SpinButton ceilSpin;
	public HTBControl(LQL.ClassHTB klass, LQL.Con con)
	{
		this.klass = klass;
		this.con = con;
		Gtk.Window myWin = new Gtk.Window("TC GTK+");
		myWin.DeleteEvent += new DeleteEventHandler(WindowDelete);
		Gtk.VBox vbox = new Gtk.VBox(false, 3);
		Gtk.HBox hbox1 = new Gtk.HBox(false, 2);
		hbox1.Add(new Gtk.Label("Rate (bytes/sec): "));
		this.rateSpin = new Gtk.SpinButton(0, 10000000, 1);
		hbox1.Add(this.rateSpin);
		vbox.Add(hbox1);
		Gtk.HBox hbox2 = new Gtk.HBox(false, 2);
		hbox2.Add(new Gtk.Label("Ceiling (bytes/sec): "));		
		this.ceilSpin = new Gtk.SpinButton(0, 10000000, 1);
		hbox2.Add(this.ceilSpin);
		vbox.Add(hbox2);
		Gtk.Button modifyButton = new Gtk.Button("Modify");
		modifyButton.Clicked += new EventHandler(Modify);
		vbox.Add(modifyButton);
		rateSpin.Value = this.klass.Rate;
		ceilSpin.Value = this.klass.Ceiling;
		myWin.Add(vbox);
		myWin.ShowAll();
	}
	static void WindowDelete(object o, DeleteEventArgs args)
	{
		Gtk.Application.Quit();
		args.RetVal = true;
	}
	void Modify(object o, EventArgs args)
	{
		this.klass.Rate = (uint) this.rateSpin.Value;
		this.klass.Ceiling = (uint) this.ceilSpin.Value;
		this.klass.Modify(this.con);
	}
}
using System;
using Gtk;
using LQL;
class MainClass {
	public static void Main(string[] args)
	{
		Application.Init();
		LQL.Con con = new LQL.Con();
		LQL.Interface nIf = con.FindInterfaceByName("eth0");
		GLib.List classes = con.ListClasses(nIf);
		foreach (LQL.Class klass in classes) {
			if (klass is LQL.ClassHTB) {
				new HTBControl((LQL.ClassHTB) klass, con);
			}
		}
		Application.Run();
	}
}

Gay Marriage in Canada

On February 1, 2005 the Federal Government of Canada introduced legislation into the house of commons that would make gay marriage legal across the country. Courts in most provinces have already ruled that stopping gay marriages is unconstitutional so it should not be surprising that the federal government has taken this measure. Not only is it the right thing to do, any attempt to make gay marriage illegal would almost certainly be struck down by the supreme court based on the Charter of Rights and Freedoms anyway. Nothing but the lining of lawyers pockets and the wasting of tax payers money would be served by such an attempt.

None of this has stopped the usual bantering and idiotic arguments put forward by the “anti-gay marriage” people.

First of all, I think I am pretty unbiased on this issue. I’m not gay; I don’t know any gay people. No matter how this ends it will not change my day-to-day life one bit. What bothers me about this issue is the abuse of the principles involved and the complete lack of logic.

Most of the quotes below come from a CBC story called Cotler unveils ‘landmark’ same-sex law.

“If you’re going to throw open the definition of marriage so you destroy it in essence, how do you know you can ever draw the line any place? If I want two or three wives and want that considered legal marriage, who are you to tell me I can’t do that?” – Ontario MP Pat O’Brien, May 10, 2003.

This is nothing but fear mongering. Society can, and does, set limits all the time. Did lowering the drinking age from twenty-one to nineteen “throw open” the possibility of further lowering the drinking age to sixteen? Of course not.

“The Conservative party will fight to give a greater voice to Parliament. We will ensure that issues like marriage are decided by Parliament, not the courts.” – Party website.

Great plan. Lets have societies dominant elements decide for everyone else what is OK and what is not. That is a sure way to make sure everyone is treated fairly. Wake up! The Charter was created for exactly this reason. The elected representatives who, in a large part, represent the dominant groups of society cannot be trusted to enact legislation that protects minorities.

. . . no religious officials will be forced to perform marriages that are contrary to their beliefs.
– Justice Minister Irwin Cotler

Vic Toews, the Conservative party’s justice critic, disputed the Liberals‘ insistence that the law protects religious officials from having to perform gay-marriage ceremonies.
He also said there’s no protection for individual Canadians who don’t hold a church office but want the right to refuse to have anything to do with gay marriage.
. . .
Toews cited several examples of people and groups whom the bill wouldn’t protect:

  • Civil marriage commissioners in Saskatchewan and Manitoba, who have been told they must perform same-sex ceremonies or lose their jobs.
  • . . .

How is this any different than if a civil marriage commissioner refused to marry an inter-racial couple because of his or her beliefs? The answer? It’s not. The idea that an agent of the state should have discretionary privileges is absurd. Why even have laws if the people implementing them have the option to ignore the laws they do not agree with?

That’s why his party [Conservatives] will try to amend the bill, limiting marriage to one man and one woman while offering homosexual couples full rights under some other type of civil union.

Notice the word “full”. At least in this case they have not used the word equal. I always find people who say things like “We believe in equal rights . . . gays can have civil unions with the same privileges as marriage just not marriage proper” hilarious. You either believe in equal rights or you do not. Adding a qualification to any statement about equal rights means that you do not believe in equal rights, period.

“What we are seeing is a consistent pattern,” he said. “Whenever equality rights and religious rights collide, equality rights trump.” — Vic Toews

Again, I am dumbfounded by this person. Of course equality rights trump religion. Think about how absurd it would be if it were the other way around. Which religions views would would society take as ‘right’? What about religions whose views directly contradict each other?

The people fighting against gay marriage need to seriously think through their views. They should think about how the world remembers the active and vocal racists of not so long ago. For this is exactly how the world will remember the anti-gay marriage people in twenty years.

LQL#

Work has begun on the long promised Mono (C#) bindings for LQL. This little C# program will display traffic statistics for all of the queueing disciplines that are supported by the C LQL library.

using System;
using LQL;
class MainClass {
    public static void Main(string[] args) {
        Gtk.Application.Init();
        LQL.Con con = new LQL.Con();
        GLib.List ifList = con.ListInterfaces();
        foreach (LQL.Interface netInf in ifList) {
            GLib.List qdiscList = con.ListQdiscs(netInf);
            foreach (LQL.QDisc qdisc in qdiscList) {
                qdisc.UpdateStats(con);
                qdisc.PrintStats();
            }
        }
    }
}

Very exciting stuff!

LQL# is not nearly polished enough for a public release yet but I am quite happy with how the work is progressing.

A common archive format for web forums and email lists?

Here’s a little wish list idea for someone with more time than I to work on.

Since the idea came from the use of Usenet it is probably best to start with a short description of what exactly Usenet is. Usenet is a method for large groups of people to communicate about particular subjects. These discussion groups are divided into hierarchies, similar to how domains are divided. For example, the comp hierarchy contains comp.os.linux.advocracy, comp.os.solaris etc. Whatis.com has a definition of Usenet that may be useful. Anything you can possibly imagine, and more, is discussed on Usenet. In the earlier days of the Internet Usenet was the primary place for technical discussions. Unfortunately, this has changed as more and more people use email lists and web forums.

Google maintains a huge archive of Usenet posts going back many years. They claim to have over 1 billion messages in their archive. Using groups.google.com you can search this archive. Anytime I have a technical question, particularly for programming and networking problems, I always start by searching Usenet. The main reason for this is the fact that all discussions are archived in such a way that you can always see the entire thread and easily move between messages. This is particularly useful when searching for a question. Finding a post that asks the same question is useless if the associated replies that may contain a solution cannot be found. Try a search for “aes vs twofish” at groups.google.com. Clicking on any one of the results will allow you to view the entire discussion thread.

Fast forward to 2005. As the technical abilities of the average Internet user has dropped discussions have moved from Usenet to mailing lists and web forums. This change is happening because users already understand their email client and web browser and have little desire to find a Usenet client or discover the Usenet features of their email client. The problem with this trend is that finding information is now much harder. Try the “aes vs twofish” search with the Google web search. The first result I get is a message called “AES256 vs Twofish performance (Was: twofish keysize)”. This is a email that was sent to the GnuPG users mailing list. Once you follow the link Google can no longer help you. You are limited to whatever features the mailing list archive offers. Some mailing list software provides decent search features but most do not. Web based forums are usually even more difficult to use. Many are ugly, slow and certainly do not present a consistent interface across archives that would make finding information easier.

In order to bring these discussions back into a form where search engines can do what they do best we need a mailing list and web forum archive format. Search engines could pull the archives for each list or forum and present a consistent interface like groups.google.com does.

So that is the task I set out. Define a discussion archive standard and convince all web based forums and email list software providers to support it. The search engines will follow soon after.

LQL 0.7.0 released

Another new version of LQL is available.

0.7.0 changes:

  • Add some new test programs to the tests directory.
  • Fixed a bunch of small bugs that were found with the new test programs.
  • Change the return type of a few _new() functions from GObject to the proper object type.
  • Update docs to match new API.
  • Add some background comments to the documentation.
  • Add support for the DSMark QDisc and corresponding documentation.
  • Add –with-kernel-source=PATH option to configure so alternate kernel include directories can be specified.
  • Add support for the Netem QDisc (everything but distribution tables). This means you now need the headers from a kernel with Netem support in order to compile LQL.
  • Add support for the TCIndex classifier.
  • Put some more time into the classifiers. Still not complete.