Arnt Gulbrandsen
About meAbout this blog

Making X11 usable across the internet. A sigh.

I am the fool who tweaked Qt to work with long-distance X11. The main problem was slow startup; if the ping time to the display was 0.1s, then applications needed 0.5s or more to start. So I fixed that, tested it using Qt/X11 applications on a transatlantic link, then fixed whatever else that I noticed because of the slow link.

As far as I know, noone ever made use of this work.

That didn't prevent someone at Trolltech from trying some of the same again twelve years later, except this time with better buzzwords and more effort.

So why did I do it? I don't remember. Perhaps someone had told me that X11 was network-agnostic by design and Qt's implementation fell short of the design, and I let myself be persuaded. Perhaps I told myself. One thing is sure: Noone had told me that this was a problem for their actual, concrete, existing application.

Maybe my work helped sell a seat or two for Qt. Many people are willing to pay for features or performance they don't need, so it's entirely possible. But I think it was probably waste. I feel good about it, though, because quite recently I was able to avoid a mistake by having learned from those two.

I've been a professional programmer for twenty years now. That seems to be long enough that for whatever mistake anyone proposes to make, I have made or watched a similar mistake at least once before. I'm not sure whether that's good or bad. Seeing a mistake be repeated is such a sad feeling.


inSort()'s revenge

Once upon a time, twenty years ago now, Qt's generic data structures included a function called QList::inSort(). Haavard Nord wrote that and didn't really document it, and when I wanted to write about it he only said it was useful sometimes. What was I to write? Use inSort() rather than insert() when that's useful?

There is a chance that I simply deleted it when I couldn't write sensible documentation.

Two decades later I finally understand why inSort() was a good idea after all. It's useful for a particular kind general data structure that only occurs in GUIs: The list that should be mostly sorted, but should not be resorted once it's shown on-screen.

Consider a list of things that the user can select and either open or delete. Sorting by modification time can make sense (for some kinds of things), but if a UI-thing were to move when someone else updates the actual-thing, then it might move an instant before the user selects and deletes that. Oops.

Thus inSort(). Stupid name, but its presence would have been an improvement to some GUIs.


SEO at Trolltech ca. 1996

My cron-driven alter ego ran several scripts on the Trolltech web server. This is about one I wrote in 1996 and ran every half-hour to make sure that qt-related subjects were well covered by the search engines. At the time, some search requests didn't give as good results as they could have, and I thought the likely reason was that the search engines hadn't crawled the right pages.

But the pages tended to be in the Trolltech referrer log, or if not, then some other page very close to them were.

So I wrote a crontab script to watch for new referrers in our apache logs, and whenever it saw one, it did the following.

First, get rid of spam (yes, even then there were spam pages). The test was simple: At most x% of the text could be links, the page should mention one of a set of keywords, the page could contain at most y links, and at least one link had to point to Trolltech.

If the page passed that test, the script tried to clean up the URL a bit (delete session cookies, delete index.html). Next it tried to locate a higher-level index page linking to the candidate page and other related pages (since submitting an index page gave the search engine more to work with).

Finally, the script would submit either the payload page or the index page to Altavista, Hotbot, Lycos and a fourth engine whose name I've forgotten. I don't think it was Google, Google came later.

It worked very well. Searches for Qt-related subjects gave better results than before, and yes, the search engines saw more links to The script ran until shortly before I left Trolltech in 2001. By that time Google had learned to crawl well, and the script laid unused and forgotten until I found it today, while going through and wiping my old hard disks. (Update: The reason I don't know the name of the fourth search engine is that I had put the submission URLs in a configuration file.)

Update: The fourth was, of course, Excite, whose existence I had quite forgotten.


Trolltech's documentation process

When I arrived at Trolltech, there wasn't much documentation for Qt. Some good intentions, some outdated Τεχ source, no plan for improvement. Having suffered from that (I was the world's first external Qt user and needed documentation) I set about writing a usable documentation tool and documentation. One of my jobs became Documentation Supremo. I wrote some/much documentation, wrote the tools, kept track of quality and gradually improved the way we produced our documentation.

I did not write all of the documentation, far from it. While I wrote much and looked at the rest, I could not have written all. It was essential that everyone who wrote code, also wrote documentation.

Our documentation process worked (we wrote documentation and it largely satisfied the readers), so in this post I attempt to document what we did and what made our process succeed. (more…)


Regarding recent developments at Trolltech

Nokia's rampage makes me want to post the picture below.

It's from a very rainy Friday in September 2000. I had a meeting around noon that day. Directly afterwards, I went for a weekend in the mountains with two friends, and I felt just like that.

About an hour after the picture was taken, over dinner, I explained my mood. Unless things change, I expect I'll leave in a few months. My forecast was good, I gave notice four months later, ten minutes after another depressing meeting.



The text we've all learned to read is arranged in lines: Horizontal baseline, regularly sized letters, regular line height, lines neither too narrow nor too wide.

Anyone who breaks those rules disturbs the mind's reading and distracts from the content. Minor violations cause minor disturbance.

Which is fine, I suppose. Ask any advertising agency. If you violate the right norm you can make the brain sit up and take notice of a message it would otherwise skip. Drink Coca-Cola. But it's not something a GUI program should do. GUI programs should form the thinnest possible barrier between user and data. (more…)


Zero bits of information

I quote at length from chapter four of Jef Raskin's book The humane interface:

We have looked at two interfaces, one of which will take about 5 seconds to operate and the other of which will take more than 15 seconds. [...] It is clear which of the two better satisfies the requirement. The next question that we ask is how fast an interface [...] can be. (more…)


Software patents not all bad

So Paul Allen sues over patents and I'm sure he'll attract a lot of flak for that. But a side issue interests me particularly: The patents were originally awarded to Interval Research, a tech R&D firm founded by Allen and former Xerox executive David Liddle in 1992. The firm was folded in 2000, and the patents were later transferred to Interval Licensing. (more…)