Archive for the ‘computer’ Category

Legalese hall of shame

Saturday, June 2nd, 2001

Don't you just hate software licenses? Not only are they appalling examples of use of the English language, but more often than not they are downright hostile as well as being just plain difficult to read. This is particularly annoying when you "have to read and agree to this license" before installing the software - quite often you feel like you have to hire a lawyer before continuing the installation procedure, and let's face it - most of us just don't bother - we assume the license doesn't say anything too nasty and agree to it without reading it. I hope this page will start a meme which changes this deplorable state of affairs. I intend to list on this page the top ten best and the top ten worst software licences, according to the scoring system outlined below.

I haven't scored any licenses yet, but if you'd like to do one, please send the name of the license, the company which created it, the name of the software product it covers and the score to me at andrew@reenigne.org.

Legalese hall of shame - scoring system

  • 1 point for each occurence of any of the following legal jargon words or phrases:
    • notwithstanding
    • limitation
    • limited
    • including, but not limited to
    • may not
    • must not
    • authorized [or authorised]
    • entity
    • without prejudice
    • void
    • exclusive [or exclusively]
    • inclusive [or inclusively]
  • 1 point for each word in CAPITAL LETTERS, not including acronyms. As we all know, words in capital letters really *really* have to be obeyed, much like the difference between a "dare" and a "double dare".
  • 2 points for each term "defined" by the license
    • +2 extra points if the definition of the term is completely obvious to a non-lawyer without the definition
      • +2 extra points if you have to think to make sure that the definition means what you think it means.
    • +5 extra points if the term isn't used anywhere else in the license
  • 5 points for each misspelt word or misused punctuation mark.
  • 5 points for each use of the passive voice (a grammar checker will help here).
  • 5 points for each sentence longer than 50 words.
  • 10 points for each sentence which does not make sense in the language the license is written in.
  • 10 points for each of the following rights the license tries to take away from you:
    • the right not to have your email address used for unsolicited commercial email
    • the right to rent something
    • the right to lease something
    • the right to lend something
    • the right to borrow something
    • the right to time-shift or space-shift something
    • the right to archive something
    • the right to resell something
  • 10 (ten) points for each time a number is used in both numeric and longhand versions, e.g. "90 (ninety)" or "thirty (30)" (like that's supposed to make it clearer, or "more legal" or something).
  • 10 points for each of the following:
    • a premium rate telephone number
    • a telephone number in a different country to the country you are in, or in which you bought the software
    • a telephone number but no email address
    • a postal address but no email address
  • 10 points if you are told that by doing something you agree to the terms of the license (this always reminds me of childhood games involving writing an insult on a piece of paper and writing after it "if destroyed true").
  • 20 points if you paid for something, and the license claims it doesn't have to work.
  • 20 points if the license tries to take away your right to reverse-engineer anything.
    • +20 extra points if there's no "except to the extent that such activity is expressly permitted" (or equivalent) clause.
  • 20 points if the license has more than one language on the same page.
  • 50 points if the license is longer (in bytes) than the content it protects.
  • 50 points if you found a way to access the content without even seeing the license, let alone "agreeing" to it (implicitly or explicity).
  • 50 points if the license agreement itself is explicitly copyrighted.
  • -10 points for each attempt at humour
    • -10 extra points if it's actually funny

GEM

Thursday, March 22nd, 2001

To run GEM on a modern PC, you first need to download this file and unzip it into the C:\GEM folder (which you must create). You must ensure, when unzipping, that you get the unzip program to re-create the directory structure stored in the archive. To do this with PKUNZIP for DOS, use the command line:
C:\GEM> pkunzip -d gem.zip
Other unzip utilities may different ways of doing things.

If you don't have a hard disk called C:, or you don't have permission to create a folder in the root directory there, you will have to do some serious fiddling about to get it to work. Don't blame me - this wasn't designed to be used with hard disks at all.

To run GEM, just run the C:\GEM\DESK.BAT file. You can also run "DESK 200" to set the screen mode to 640x200 and then start the Desktop, or "DESK 350" to set the screen mode to 640x350 and then start the Desktop (depending on how you like it). 640x200 (the default) is better for a more authentic Amstrad PC1512 experience, whilst some Amstrad PC1640s used the 640x350 mode.

Once you've reached the desktop you may want to use the "Install disk drives" item on the options menu so you have access to all your drives. You have to highlight a disk drive before the option becomes available.

You might need a DOS mouse driver in order to use the mouse under GEM. If the mouse doesn't work, have a look on your hard disk, or the disk which came with your mouse, for a file called something like MOUSE.COM, MOUSE.EXE, LMOUSE.COM or MMOUSE.COM and insert the command line to run it after the "@echo off" line in DESK.BAT (e.g. "C:\DRIVERS\MOUSE\MOUSE" if you found MOUSE.COM or MOUSE.EXE in the folder C:\DRIVERS\MOUSE). If you don't have a DOS mouse driver, contact the irresponsible people who sold you your computer, or download the one from the library repository (it might work). If you use DOS programs which require a mouse a lot, you might want to put the command in your C:\AUTOEXEC.BAT file so that it's always available.

If you're running under Windows, you can run GEM in a window by pressing Alt-Enter once it's started. This is handy for taking screenshots of your GEM PAINT pictures which you can then convert to other formats.


GEM Desktop


Locomotive BASIC2


GEM Paint

VNC over SSH via a firewall

Wednesday, March 7th, 2001

I live in a student house with three other guys. All of us have computers and two are computer scientists. We have a cable modem for our internet access which provides high-speed access 24/7 for a flat fee. We have installed network cables under the floorboards so that we can all use our computers in our rooms.

The physics department is on the other side of town, a 20 minute bike ride away. It is extremely useful to be able to access my computer (which runs Windows) from the department. Since it runs Windows, the best way of doing this is by VNC.

Normally to connect to a remote computer using VNC is it is a simple matter of running the server software on the computer you want to connect to, the client software on the computer you are sitting at, and just opening up a TCP/IP socket connection between the two.

However, because of the way our house network is set up, connecting to my computer from outside the house is much more complicated. There is only 1 IP address for the whole house, so my computer does not have a globally accessible IP address (it is known as 10.0.0.36 to the rest of the house). The cable modem is plugged into a firewall which does the appropriate packet forwarding and rejects all incoming connections except for SSH (which is a very sensible thing to do).

I could have opened up another port on the firewall and forwarded it to the VNC port on my computer, but this would be somewhat insecure. VNC uses challenge/response authentication so it is unlikely that a malicious hacker could sniff the password, log in and take control of my computer. However, all VNC's data is sent as plaintext, so would be susceptible.

The solution to both problems is to route the VNC data over SSH. This is somewhat non-trivial to do, and the purpose of this document is to explain how it's done.

You need an SSH client which can do port forwarding at each end, and an SSH server running on the firewall. In this case, I am using a Windows NT machine running at the physics department to connect to my machine, which runs Windows 98. Both Windows machines can run Teraterm Pro with the TTSSH SSH extension. The firewall runs a Unix derivative, for which SSH software is ubiquitous.

On my computer I perform the following steps:

  • Set up the VNC server (which listens on port 5900)
  • Start Teraterm with the command "TTSSH /ssh-R40000:localhost:5900"
  • Log in to the firewall over the local network using it's local IP address and the normal SSH port (22)

Next, I cycle to the physics department, log in and perform the following steps:

  • Start Teraterm with the command "TTSSH /ssh-L5900:localhost:40000"
  • Log in (securely) to the firewall using the normal SSH port (22) and the global IP address of the house.
  • Start the VNC client, connect to localhost, log in and it works!

There are a couple of complications. Firstly, our cable modem provider reserves the right to change our IP address at any time (we are not strictly speaking allowed to run servers). So I need a method to find our IP address. Fortunately, I already run ICQ so this provides a simple solution. A small ICQ client (if you don't have much space) can be found here. If you don't trust ICQ, you could write a small program to run on your machine to connect to a machine whose IP address you know, and another small program to run on that machine which you can connect to from elsewhere to find your IP address.

[Update] The latest versions of ICQ don't show you the IP addresses of people on your contact list who are online. A better solution is to use a dynamic DNS client (see, for example, http://www.dyndns.org). Then you don't need to install anything on the client machine, and just need to remember your hostname.

The other complication is that the Windows VNC server does not normally support loopback connections. To enable them, run REGEDIT and add to the key HKEY_LOCAL_MACHINE/Software/ORL/WinVNC3 a DWORD value with the name "AllowLoopback" and the value 1.

Happy VNCing!

ICQ Privacy

Wednesday, July 12th, 2000

I use ICQ a lot for keeping in touch with friends, and it's great at doing just that. However, as anyone who uses it a lot will testify, you quite often get messages from people you don't know. Some people (me included, as long as I'm not too busy) like that, but many people don't, particularly women, who (I'm told) sometimes get some quite disturbing messages from the more unsavoury members of the ICQ community - enough to make some of them want to give up using ICQ altogether. This tutorial is for these people.

I'm using the ICQ 99b software for Windows 95. If you're using a different client some things may be different, but they should be pretty similar if you're using an official Mirabilis clients. For some of the options you may need to put ICQ in Advanced mode if it isn't already - to do this, click "ICQ", "Advanced Features".

In order to send you a message, the sender must be able to find out your ICQ number. There are a limited number of ways this can be done:

  1. Random Chat
  2. White pages
  3. You giving out your number
  4. Other people giving out your number
  5. Trying random numbers

We'll cover these in order.

Random chat is easy to turn off. Press the ICQ button, "Find/Add Users", "Random Chat"and make sure that you are not "available for random Chat & Messages".

White pages is the main source of ICQ numbers, since relatively few people have Random Chat switched on (it's off by default). In order to get a number from White Pages, you must give it some information - a name, an email address, an age, a gender, a language, a place or some hobbies/interests. So to prevent yourself "getting found" the trick is to tell ICQ as little about yourself as possible. Press "ICQ", "Add/Change Current User", "View / Change My Details". The obvious ones to remove are your birthday, gender, location, "Info/About" and interests. You might also wish to remove your name if you're particularly paranoid. Remember, lower ICQ numbers are found first and only the first 40 numbers found are shown. Try doing a white pages search on the information that you have put in and see how easy it is to find yourself. Put yourself in the position of a horny teenage boy and think about what sort of infomation he would enter in his search.

The third item is easy to do something about - just only give out your ICQ number to people who you know and trust, don't publish it on your website unless you want the people who read your website to ICQ you.

The fourth item is a bit more difficult. People you like will presumably respect your privacy by not giving out you ICQ number to anyone who asks them for it, but if someone you don't like has got hold of your ICQ number and is posting it on alt.sex newsgroups or something like that, there's not too much you can do about it. If it's one person you're getting messages from you can just add them to your ignore list but if it's dozens it's much more difficult. If the worst comes to the worst, the best thing you can do is get a new ICQ number and start afresh ("ICQ", "Add/Change Current User", "Add Another Registered User").

The fifth method of finding your ICQ number you can do nothing about. However, I imagine it is pretty rarely, if ever, used. There are something like 60 million assigned ICQ numbers, so the chances of you being singled out are pretty rare. Anyone sending messages to huge numbers of ICQ users will get kicked off the network pretty quickly. So if, after taking all the above precautions, you still get unwanted messages, I suggest just adding that user to your ignore list and thinking nothing of it.

Here are another few useful couple of privacy tips. Go to "ICQ", "Preferences & Security", "Security & Privacy":

  • Make sure that your authorisation is required for people to add you to their contact lists. Someone who's found you in white pages will almost certainly try the people who don't require authorization first.
  • Don't publish your IP address. Although a determined hacker can still get at it, even the most junior of "script kiddiez" know how to use an IP address to find out what internet service provider you use, find out what operating system you are running and sometimes even crash your computer if you are running certain versions of Windows. The security implications are much greater if you are using a static IP address (such as your own computer on a university network) than if you are using a dynamically allocated IP over a modem to your internet service provider.
  • Make sure that the "Web aware" option is off - particularly useful if you have some people on your "invisible" list, or are in "privacy mode".

I feel I should add a footnote to say that these precautions are necessary only if you feel that unwanted messages are a problem, and that this problem is caused by a tiny minority of irresponsible users. Most people on ICQ, as in the world in general, are very nice people once you get to know them (even if some days it seems like the nice people are in the minority).

Finally, if you find someone on ICQ white pages and contact them, it's only polite to introduce yourself, say why you're calling and ask if they have time to chat (just like you would do on the telephone). Remember, you might know all about them from their details page, but they will in general know nothing about you.

The future of music distribution

Wednesday, July 12th, 2000

I remember the first time I heard about MP3 - it was from a purely technical point of view. A friend was telling me about this new sound format with terrific compression ratios and how it used psychoacoustical techniques to achieve this compression with no loss noticeable to the human ear and about how it could be played back with a reasonably modest PC. Remember, when reading this essay, that although I am talking mostly about MP3, that it is a just a format, not a way of life - MP3s can be used quite legally and any other music format can be used for piracy in just the same way (MP3 is just a particularly convenient, hence popular, hence controversial one).

What he didn't tell me was the enormous social implications which would be brought about by this invention. To be fair, back then few people had heard of it, fewer still had the equipment to play it back and it probably wasn't an issue. But less than 2 years later, I myself have the equipment to make, play, obtain and distribute MP3s. I have an incredible music system in front of me. If I think of a song I want to hear, and I can remember its name (or even just some of the lyrics) I can obtain a near CD quality copy of the song in minutes at the touch of a button, for free, and from the comfort of my own room.

But there are two tiny problems with this musical utopia. It is illegal, and it is immoral. I shall ignore the fact that it is illegal and concentrate on the far more important moral aspect.

The main problem is that if I go to one of the many music shops in Cambridge and buy a CD containing a song I want to hear, the artist who recorded it gets paid some money, whilst if I download the song from the net or make an MP3 from a friend's copy of the CD, that artist is paid nothing.

Artists have to eat. Some die-hard campaigners for free music will claim that any artist worth their salt isn't in it for the money, but for the sheer love of music and of performing it, and for making their fans happy. To a certain extent, this is true, but the fact remains that they have to make a living out of it, or they'll have to find something else to do, and chances are that that career won't leave enough time for making the music we love to hear.

There is also the problem of ensuring that the artist's popularity is recognised. When I buy a CD that purchase is registered in the sales charts for that week. Musicians whose works are popular are kept on by the record companies and encouraged to make more records. Musicians whose music nobody buys are not invited to make any more recordings (even if their music is very popular to download over the internet).

A good way to judge whether something is immoral or not is to imagine what the world would be like if everybody did that thing (incidentally, that's also a good way to decide what should be legal and what should be illegal, but laws are just another form of moral code - one which is forced upon us and enforced by the judicial system). If everybody downloaded MP3s instead of buying CDs, then all the artists would starve to death and nobody could afford to make music anymore (okay, deeply oversimplified picture but you get the idea).

I buy many more CDs now than I did before I started downloading MP3s. There are several reasons for this. One is to save my poor overloaded hard disk from cracking under the strain of all that music. Another (probably lesser, if I'm honest - practical considerations all too often seem to come first) reason is to support those that make the music I love. I've discovered a lot of music through listening to MP3s that I might otherwise never have heard. If I find I have many MP3s by the same artist I try to find an album which has as many as possible of those songs on it and buy that album.

So perhaps everyone should be free to download as much music as they like, but they should still buy the occasional album to keep the artists happy. The artists should see the free music as a promotional tool, not as a threat to their livelihoods. An ideal situation, right?

Well, no, not perfect, because albums are a very clumsy way to buy and listen to music when you've seen what MP3s are capable of (and, by the time you reach the end of this essay, you should understand this). Let's leave aside for the moment the fact that not everyone is as conscientious as I am and that in all probability most artists in the "free music" society wouldn't make as much money as they do in this one.

On any given album in my CD collection, there are some songs I like more than others. Some albums have a higher proportion of songs on that I like, and some have only one or two that I'd listen to by choice. I've never come across an album where I like all the tracks the same. But the way I tend to listen to albums is to just stick one in the CD player and press play, and then when it finishes change it for another. I listen to all the tracks the same number of times, even though I prefer some to others. Of course, I could change CDs after every track, but it's too much effort, particularly since I tend to listen to music whilst doing other things. I could just skip the occasional track but then I'd have to change CDs more often. Also, unless you have a shuffle feature on your CD player you always hear the songs in the same order, which can get boring.

When I listen to my MP3 collection I shuffle the whole thing into random order and play it all the way through. I can skip any tracks I feel like skipping and the list will still take me days to get through. Since I've hand picked every song, I generally get higher quality music (i.e. a greater percentage of songs that I like) when I'm listening to my MP3 collection.

What I'd like from an ideal MP3 player would be for all the tracks to be weighted, and for it to pick one at random that I haven't heard too recently. If I get bored of a track I should be able to say "play this one a bit less often", whilst if I hear a great song that I haven't heard for a while, I should be able to say "play this one a bit more often". If I really get annoyed with a song I should be able to say "never play this song again unless I specifically ask for it" (these commands will henceforth be referred to as "voting for" a song). I'd have a continuous stream of music much like I get on the radio, but tuned to my specific tastes, and without those annoying DJs (apologies to any DJs reading - I don't hate quite *all* of you...)

The system could be further refined by telling the computer what sort of mood you're in. There will be some songs that you like whilst you're in one mood and some songs that you like whilst you're in another (it would get to know this by which songs you voted for whilst in which mood). Then it can use a different set of weightings depending on your mood. You could even take into account that some songs will change your mood, so you could instruct the computer "play some music to cheer me up". Try doing that with your CD collection!

So lets suppose for a moment that we're in some sort of socialist utopia where the artists get all they want to eat and everybody listens to music like this. How does anybody ever get to hear any *new* songs? We need some sort of infrastructure in place whereby new songs can get into the system. Well, you could get told by your friend about this great new song he heard recently, but that's a bit hit and miss, especially since your friends might not share your taste in music. You could listen to the radio, but then you might end up listening to stuff you don't like (plus, of course, all the time you're not listening to your own personal music collection you're not refining your preferences).

The answer is really fairly simple if you think about it. All it requires is a very slight modification to the program. In this ideal society, everyone has, of course, a permanent high-speed connection to the internet. In fact, all this music is probably being streamed from a server somewhere to save you having to lug around gigabytes of storage in your personal stereo. So all you need to do is to instruct the server to occasionally play you a track you haven't heard before, based on the songs liked by other people that like the same songs as you. When the server decides that you should hear something new, it looks at somebody else's music collection, collects a list of songs that they like you haven't heard before, decides how much their tastes overlap with yours, weights the list by this "overlap coefficient" and by how much they like these songs, repeat for lots of people and pick the song which comes out with the highest score (you could take your mood and the moods of these other people into account as well). It then plays you the song and you can vote on it. If you're an adventurous listener, you might instruct the computer to find new songs often, if not, you might tell it to do so only rarely.

New songs get into the system because everyone uses it, even the artists who are recording these new songs. The artist just tells the computer that she likes the new song she's recorded, and soon it's being recommended to people who like the other songs she likes (including those she's made). The computer ought to take into account how many times a particular song has been heard to give new songs a chance to spread.

It will be easy to generate accurate statistics about how popular any given song or artist is - just add up the votes for each song. People can choose to listen to the most popular songs if they want to. The system could also take into account different genres (although, of course, since a song rarely fits into any given genre, it will probably have weightings in many different genre categories).

Finally, if there are two people in the room, the computer will be able to pick songs that both people like. Even with a room full of people, all with different moods and personal preferences, the computer should be able to pick a song that at least most of the people there will like. If you want to meet people with the same taste in music as you, you could just go to a place which is playing music that you like and meet the people there. Or you could be even more direct about it and ask the computer to introduce you to (or get the email address of) someone who has the same taste in music as you. Give the computer a bit more personal information about yourself and you can use your MP3 player as a dating agency!

There's still this question of money. The artists still have to eat. Well, I don't know about you but I'd certainly be prepared to pay quite a lot for that service. I have bought (or been given) about 60 albums in the 6 years or so since I started buying CDs. That's at least about £100 worth of CDs a year. If this service is as good as it ought to be I need never buy a CD again, so I'd be quite prepared to pay that much for the service. However, since the overheads are so much lower (there are no CDs to make and artists won't need to employ a record company to promote them) the artists will be able to make just as much money with us spending much less on our music.

There are several payment systems which could be used. There could be a fixed annual sum (as with TV licences in Britain), you could pay by the track, or by the minute that you spend listening to music. You could even pay nothing yourself and let the computer play adverts to you instead. You could vote for and against adverts just as you do with music tracks so advertisers could find out which adverts you like and which just get on your nerves (the "never play this again" button, applied to adverts, would be a fantastic tool for giving the advertisers some incentive to make their adverts less annoying). The mood system could also be applied to adverts.

There are many other ideas I've had for this that I haven't covered - choosing the right music for the occasion, for example - you could say to the computer "I need some music for a party. Here's the list of people who will be there and I want to get them dancing." or "I've just brought this girl back to my room for coffee and I need some romantic music now!". Or the fact that there might be two songs you like but you wouldn't want to play one after the other. Or that some people like to listen to entire albums, with the tracks in the order the artist put them in. Or the new generation of personal stereos which contain wireless internet connections for the purpose of listening to this music, buttons for voting, changing your mood, etc, maybe a screen to display lyrics, images or videos...

Of course, you can still download the music so you don't have to pay or listen to adverts in order to listen to it if you wanted to (it's impossible to stop you doing so - something that I hope will soon be realised by those who are trying to pedal such technologies as the so called "secure digital music") but with all the extra value added by listening to your own personalised stream, I think few would want to.

I don't doubt this will happen, but a big question is how. Here are some possible ways it could happen. The reality will probably be somewhere between these extremes.

The first way starts off with the program just being a player for your own MP3s, not an MP3 exchange program. As list exchange starts to happen, bands that want to make their music available do so, in exchange for subscription fees (which are very small at this stage). Perhaps they also sell some CDs. Then, as it becomes more popular, the big record companies want a slice of the huge amount of money which is being made, and decide to release their music to the system (presumably having discovered that SDMI doesn't work). The process will happen gradually, perhaps just a few (maybe crippled) songs at first, from a few artists signed to a few record companies, but hopefully it will take off so that all the back catalogues eventually get put on as well and the streaming can really start to take off.

If the program starts to take on some of the features of Napster or Gnutella and exchange information which allows people to get in touch with each other and exchange songs if each has music the other would like, it could get completely out of the record companies control. Anarchists will like this bit - the next thing that happens is that it becomes really popular so no-one buys CDs anymore (well, maybe one person to get the songs onto the system in the first place). The record companies quickly go out of business and no-one can do anything about it. The problem with this scenario is that when the record companies collapse, talented musicians might stop making music because they know they won't be able to make any money from it. When can the system start charging? As soon as they do, a free clone will spring up and we'll be back to square one.

As you can see, the digital music distribution has the potential to not only completely revolutionise the way we listen to music, but to completely revolutionise society itself. I think it will be for the better, but if you disagree, you can always do it the old fashioned way - I'm sure it will take quite some time for it to disappear.

How to make a user friendly computer

Wednesday, July 12th, 2000

When showing a first-timer how to use a computer, it is all too easy (especially for those with years of computer experience) to assume that the user knows something that they do not, even if it's something as basic as how to use a mouse or what the spacebar is. These things soon become second nature, but this demonstrates how these assumptions can cause (sometimes quite hilarious) problems.

Equally annoying is the assumption that you don't know how to do these simple things when you do. Consult the on-line help or manual for any major Windows program (even Windows itself) and it will tell you how to do things which were almost certainly completely obvious for you unless you are an absolute beginner. The slightly more in-depth information you needed (which should still be documented) is nowhere to be found.

Of course, the computer could ask at every stage "Is this too basic/too advanced" so that it could tune its messages to be of maximum benefit to the user, but said user would quickly get bored of answering these questions all the time, especially if in a hurry. The answer I have come up with is the concept of the User-level. This is a simple scale, from say, 0 to 10, on how experienced a user is. Someone of user-level 0 has probably heard the word "computer" before but has no idea what one is, but computer should never hold anything back from a level 10 user - it should always give the most detailed information no matter how confusing it may be.

The user-level is partly a level of skill but mostly a level of confidence, or a way of measuring how scared a user is by computers.

The system needs to be implemented at many different levels. The first place is in the computer shop. Picture this scenario: A customer enters, looking to buy a computer. The first thing the sales assistant should ask (unless it's obvious - never ask a question if the answer is obvious) is "Have you ever used a computer before?" If the answer is "yes" then the sales assistant can go on to determine if (a) the customer knows what a user level is, (b) if he has one and (c) what it is. Hopefully the concept of user-level will eventually become sufficiently standardised that anyone who has used a computer before knows what their user-level is.

After making the sale, the customer walks out of the shop with a large cardboard box and basic instructions (ideally in the form of a video cassette, if the customer (or user, as we shall call him from now on) has a VCR). These instructions will tell him absolutely everything he needs to know to get as far as turning the computer on.

The first time the computer is switched on it will go into a mode which I will call "default power-on state". In this mode, the computer gives the instructions, describing what the various parts of the computer do, demonstrating (and testing) the user on the use of the keyboard and mouse, concepts such as files and applications, what the internet is, how to use the world-wide-web and email and so on. If there is more than one person learning to use the computer, it keeps track of everyone's user-level separately (how the computer knows who is using it is a bit tricky if no-one can so much as enter their names, but if there is any doubt it can always go back to the default power-on state (which the user can skip easily enough).

Since the computer keeps track of exactly what each user knows, it can always provide the most concise and useful answer to any question it ought to know the answer to. It could even use artificial-intelligence techniques to keep track of the user's learning style so it knows how fast to progress and how many times it needs to repeat everything before it sinks in.

Of course, this should always be easy to override, and the best way to do this would be a context sensitive, user-level sensitive "panic button". Pressing it once brings up the context-sensitive help for whatever application the user is using and their user level. Pressing it again explains things in simpler terms. Repeated pressing of the panic button will return the computer to the default power-on state (although doesn't abandon any work in progress). As soon as the user's panic attack is over and they find themselves in familiar territory, they can start progressing forward again. At any point they should be able to ask "what does that mean" of any technical term and receive a sensible answer.

Some users may wish to have the more personal touch of a human tutor guiding them through at least the first steps. This is easily allowed for by having an option to manually set the user level (which is what the shop assistant would do before selling a computer to someone who had used a computer before).

If the user tries to do something out of his depth, he should be told in a friendly but firm manner. For example, a command prompt might be banned for all users with user level 5 or less, so upon attempting to do this a dialog box would flash up:

This function is only available to level 6 or greater users. Do you wish to
(a) Cancel (you didn't mean to do that)
(b) Learn what this function is for and upgrade your user-level accordingly or
(c) Set your user-level to 6 and jump right in at the deep end?

An important part of this user-friendly system is the concept of reliability. It's all very well having a computer that can keep track of its user's ability, but it also has to be able to keep track of itself, and that means no unexpected behaviour. In the event of hardware failure the machine should be able to diagnose itself and call for expert help if necessary (in extreme cases, when it doesn't work at all, it will be fairly obvious that it doesn't and that it needs taking back to the shop). It should have a built-in uninterruptable power supply which integrates closely with the operating system to save any unsaved work in the event of a power cut.

This is the main reason why this machine will probably use an open-source operating system such as Linux. As computers get more complicated, it has been proven time and time again that the best way to get truly reliable software is to let every programmer in sight loose on the source code so that all the bugs get ironed out quickly. Even the huge teams of programmers at Microsoft can't find and extinguish bugs as quickly as a world full of programmers. There are all sorts of possibilities for automatic maintainance - users with low-user level wouldn't even need to be told when their computer goes online to collect the latest set of bug fixes (although new features which might confuse should be explained first).

Another reason for using Linux is the level 10 rule - "Nothing should ever be held back from a level 10 user". Taking that rule to its extreme, the source code to any of the applications on the user's hard disk should not be held back.

Hopefully the combination of reliable applications and a computer system designed from first principles to be as easy as possible to use for beginners and advanced users alike will eliminate the need in the future for such things as technical support, and Computer Stupidities will become a thing of the past.

Once we have a world of computer-literates, people who understand what computers can and cannot do and are not afraid of them, and we have computers and software that are powerful and reliable enough, then we can start to implement the systems that will really change our lives for the better.

Image editing

Wednesday, July 12th, 2000

(for Ken, and all the other Kens out there)

I recently got an email from someone who wanted to send me some images that he had scanned in with his new scanner, but was having trouble sending the 8Mb BMP or TIF file by email and was even considering wasting some trees and using (shudder) snail mail. This is a common sort of problem for people new to scanning images and/or sending images over email.

I had been planning to write this tutorial for some time, since I quite often get sent over-sized, under compressed images by email. So, when I got the email from this guy I decided to write it there and then (and dedicate it to him), so that next time someone asks I can just point them to it. I hope you find it useful and that it will help you to become a more responsible citizen of cyber-space.

This tutorial doesn't cover how to do scanning (see the manual which came with your scanner for that) or how to attach images to emails (see the documentation for your email program for that). What it does cover is the most common things you should want to do in between - cropping, image file formats, changing resolution and reducing colour depth. I usually use Paint Shop Pro for these sorts of tasks - it's an excellent general purpose image editing program with support for many file formats as well as TWAIN-compliant image sources (which is pretty much any scanner or digital camera software you care to name). Paint Shop Pro can be downloaded from JASC. All the examples in this tutorial use Paint Shop Pro. If you use different software, you'll have to do some playing around with it to find the equivalent commands (assuming those commands are supported).

Don't use TIF or BMP format unless you want to use a picture in a program that only understands those formats. Neither TIF or BMP use any compression. Their only virtue is that they are easy from a programming point of view.

The file format you want depends on the content of the image. GIF is good for images such as cartoons or diagrams, which have areas of solid colour, but it doesn't support more than 256 colours. It's particularly good for websites, since pretty much every web browser since the beginning of time supports it. It can also do animation and transparency - great for making websites. Unfortunately, people in the US are at a disadvantage since Unisys (who own a patent on the GIF format) have taken advantage of the USA's very bad patent laws to attempt to charge anyone who makes a GIF file. This lead to the "burn all GIFs day" when websites were encourages to exchange all their GIF images for superior PNG format images. People in other countries are still free to use GIFs if they like, though, and since GIF still has some advantages (it is supported by more browsers and has the ability to do animation) I encourage people outside the US to continue using it.

JPG (or JPEG or JIF) is good for scanned photos or images from digital cameras - it is a lossy format which means that you trade off some of the quality of the image to make the file smaller. Usually with photographs you can get tiny files with no noticable loss in quality (in other images the loss in quality may be more noticable).

PNG is a relatively new format which means that not many programs support it yet. It's a very good lossless general purpose format, much like GIF but with better (albeit slower) compression and support for more than 256 colours. JPG can be used with most web-browsers and PNG with the more recent ones. Most of the other formats provided by Paint Shop Pro are only provided for compatibility with other software which has a more limited selection of file formats (to edit the Windows startup, shutdown and "It is now safe to turn off your computer" screens for example, it is necessary to save a BMP image).

Just as important as choosing the right file format, though, is to crop the image properly and to reduce the colour depth and resolution of your image before saving it. Scanners normally produce very high resolution images (mine is 300dpi by default) in 16.8 million colours. This produces very big files (about 264Kb per square inch).

Use "File", "Aquire" to scan your image in the usual way. 300dpi and 24 bit colour (or "Truecolour" or 16.8 million colours). You might want to use 150dpi if you want to scan a large image quickly. Next, select the area of the image you want with the rectangular selection tool (the button with the dotted rectangle). Then select "Image", "Crop" to remove the parts of the picture you don't want. Most scanner software does this automatically, but this technique is generally more accurate since you can zoom into the image if you want to. At this stage you can also rotate the image (using "Image", "Rotate") if you scanned it at a more convenient orientation than upwards.

The next stage is to resample the image to a more convenient resolution. If you zoom to 1:1 you'll probably notice that the detail is far more than you need - unless it's a very small image only a fraction of it fits on the screen at once (even if you have a very high resolution monitor). Use "Image", "Resample" to fix this. If your image is not in Truecolour or Hicolour, this option will be greyed out and you will only be able to use "Resize", which is equivalent to scanning at a lower resolution. "Resample" has the advantage that it uses some of the information it throws away to make the image look better - a technique sometimes known as "anti-aliasing". Resampling also works better if you are increasing the resolution, but this practice is almost never recommended - if you think you need to do this you should probably have scanned at a higher resolution to start with. The "image enhancement" techniques you see in movies where a fuzzy blown up image is made perfectly sharp and clear so that you read the piece of paper sticking out of the bad guy's pocket is actually not possible.

It takes a bit of practice to decide what the right resolution should be for your image. For the purposes of viewing something on-screen (such as on a website) having the image larger than the screen is pointless (people don't like to pan around images to see all of them, and if they zoom out it means your image was at too high a resolution). 640x480 is about the practical maximum for a website, since most people use a resolution of 800x600 on their desktop and want some space for menu bars, scroll bars and that sort of junk). If you're printing your image with a high quality printer (laser, or inkjet on glossy paper) you might want to double that. If you're projecting your image onto an IMAX cinema screen, you probably want a higher resolution still. Of course, if (in the last two cases) you find your image is blocky, you can always start again with a higher resolution.

When using the Resample tool in Paint Shop Pro, ensure that the "maintain aspect ratio" box is checked, otherwise your image will look squashed or stretched.

Next, decrease your colour depth. At the moment each pixel takes up 3 bytes of memory. Since you probably still have quite a few pixels, your file is still quite large (Paint Shop Pro tells you exactly how large in the bottom right hand corner of the window). If you have a photographic image and want to save using the JPG format, or if accuracy of colour reproduction is very important to you and you are saving in PNG format, you can (and should) skip the colour depth stage and proceed to saving the file.

You probably want either 256 colours or 16 colours. (2 is useful colours if you are dealing with a black and white line drawing in very high resolution, such as you'd want for printing out on a high quality printer). 16 colours is good if you have an image which has very few colours to start with, or you're really short on space, 256 is better for most purposes. Ensure you use an optimized palette for best results (the others are designed to make images look better for people who view web pages with a screen colour depth of either 16 or 256 colours - very few people do this these days because it looks pretty awful in any case). The next choice to make is the difference between "Nearest colour" reduction or "Error diffusion". This choice is mainly a matter of taste - try both and see which you like (you can use the "Edit", "Undo" feature to take the image back to 16.7 million colours).

From the point of view of image size, "Nearest colour" is usually slightly better. I usually prefer the way it looks - "Error diffusion" will tend to give better colour definition but can make the images look grainy. All these effects are hugely exaggerated by using 16 colours instead of 256.

Now we get to saving the file. If you're saving a GIF or PNG image with a transparent background (often done with websites - see the "AJ"s at the top of this page for example) select the "dropper" tool and right click on a portion of the background (remembering that the background must be one uniform colour. This is often another reason to use "Nearest colour" - error diffusion often gives backgrounds made up of more than one colour.)

Go to "File", "Preferences", "File Format Preferences". Select the tab for the format you require. For GIF and PNG images, use "Set the transparency value to the background colour" if you want a transparent background, or "Do not save any transparency information" if you don't. For JPG images select the compression level you require. Remember that the higher the number the smaller the file but the more definition is lost. As a guideline, 10 is "high quality", 20 is "good" and 40 is "normal". You probably won't want to go any higher than 40, but feel free to experiment to discover just what the effects of changing this number are. Use another program (e.g. your web browser) to check the look of the file, otherwise you'll have to close it and then re-open it again in Paint Shop Pro, an action which cannot be undone.

Finally do "File", "Save As", enter a name, select the file type you want. Some file types have sub-types. For GIF images, use GIF89a. For GIF and PNG interlaced images are usually best. For JPG, progressive encoding is better, although some older applications can only understand standard encoding - if your favorite JPG viewer doesn't understand progressive JPGs, either save with standard encoding or get a new viewer. If you come across what you think is a broken JPG, try loading it with Paint Shop Pro - if it loads fine in that you need a new viewer.

Don't save an image as a JPG, load it again, edit it and then re-save it as this will result in a loss of image quality (much like copying a video tape over and over again). Instead always work from originals, do all your editing and then only save as a JPG when you want to publish it, send it over email or whatever. If you think you might want to edit it at some point in the future, save another copy in a lossless format such as PNG and then open that when you come to do the editing.

We have mostly been talking about colour images. What about monochrome? Well, the first thing you want to do is use Paint Shop Pro's "Colour", "Gray scale" function to ensure that the computer knows the picture really is black and white (you can do this at any time between aquiring the image and decreasing the colour depth.) You should now have a picture of 256 colours (all of them shades of grey) that you can save as a JPG (if it's a photograph) or a GIF or PNG. Monochromatic pictures suffer much less from being converted to 16 colours (shades of grey) than colour pictures do, so try doing this to see how it looks (unless you're saving in JPG format).

Finally, a word about importing pictures into Microsoft Word (similar advice may apply to other word processors but I haven't experimented with those). Some word processors, such as Microsoft Word 6, store pictures in uncompressed format when a document with embedded pictures is saved (leading to very large DOC files). Some (e.g. Word 97) save the embedded pictures in the same format they were originally saved in. Word 97 is preferred over Word 6 for this reason. Also for this reason, when using Word 97, don't use copy and paste to get the picture from Paint Shop Pro into Word. Although it's more fiddly, you'll get better results if you save the file using the advice given above, use "Insert", "Image", "From file" and select the file you saved. This will make your DOC files much smaller in just the same way that your image files will be much smaller. Remember that changing the size of the picture once it is in Word doesn't affect the size of the file, just the number of dots per inch once it is printed out. Again be careful to preserve the aspect ratio when doing this (i.e. only drag the corner resizing squares, not the ones in the middle of the sides).

Why SDMI won't work

Wednesday, July 12th, 2000

Secure Digital Music is a bit of a buzzword amongst music industry execs at the moment. You might have wondered why there isn't much music for sale on the internet at the moment. It isn't that the music industry is full of luddites - most of them are fully aware of the incredibly lucrative new age of e-commerce and the incredible possibilities which it offers (see the accompanying essay "The future of music distribution" for some examples) and are anxious to get in there as soon as possible and start taking advantage of the internet gold mine.

The reason that they haven't, so far, is that they are terrified of losing control. They think that they will sell one copy of a song online and then the person who downloaded it will just copy it and send it on to all their friends, post it on a website, etc. Never mind that this pirate could just as easily buy a CD and do exactly the same (the hardware and software needed to extract music in digital format from a music CD is legal, cheap and easy to get hold of). This is how these people think.

In an attempt to "regain control" of this music, a technology has been developed called secure digital music. However, this technology is fundamentally flawed. It doesn't (and cannot) do what it was designed to do (eliminate piracy) and it's only effect can be to make life more difficult for those who want to use the music legally.

When designing a secure system, any security expert will tell you that you have to look at the system as a whole. Think of it as a chain keeping a boat moored to the harbour wall. The chain is only as strong as it's weakest link. It's no good pouring huge amounts of money into making one of the links amazingly strong when another consists of a piece of string. Using strong encryption to transmit your credit card number over the internet to a website is still silly if the website at the other end is a fraudulent one designed only to collect credit card numbers and not send out any goods. It's also silly if you're typing the number on the keyboard of a computer in a dodgy internet cafe which could quite easily be recording everything you type.

The idea behind SDM is that you can type in your credit card number on the music company's website and it will let you download a music file in a special format which can only be played with special software and/or hardware. This music file is encrypted so that it can only be played with a specific program or device. So there's the first problem - if you have music playing software on your computer and a portable digital music device, you'd have to download two copies of each song you wanted, one for each.

Another implementation of secure digital music only lets you make a certain number of copies of a song. For example, you might make a copy and it will work, but a copy of that copy won't. This requires the co-operation of the software which is doing the copying, so this won't even begin to work on current computers - all the software must be written and controlled by SDMI. Want to program your music player to do something that it wasn't originally designed to do? No chance, it would be too much of a security risk. Bug in the software? Tough. The only thing you can do is complain to the manufacturer. Software in general is going the other way - towards open source, where the programmers have to be completely honest to the customers because they can no longer hide behind their compilers (programs which translate human readable computer code into human unreadable, machine readable only code). Open source software is more reliable (because bugs are more easily spotted and fixed - more eyes on the source code means fewer places for the bugs to hide) and more secure for the same reason. However, if your customers can change the programming of the music playing device you're selling, they can change it to turn the copy protection features off.

Some such devices have many bugs. Even moving a song on the internal hard disk of the player device might be interpreted as "copying" so doing too much of that means the song will just stop working.

So SDMI is bad. It stops people legitimately doing what they are perfectly within their rights to do. However, I will now show that it doesn't stop the activities it's trying to stop, just makes them slightly more difficult. There are a couple of weak links in the chain which just can't be strengthened - SDMI have either conveniently forgotten these links or have chosen to ignore them to satisfy their member companies (who will be very disappointed when they discover that the chain breaks, just like it did with DVDs).

The first weak link occurs if you are able to play back the music on any general purpose computer available today, even if you are using SDMI stamped secure software to play back the music. The music must be decrypted by software to send to the sound-playing hardware inside the computer. This sound playing hardware is controlled by a small program which is part of the operating system, the "driver" for that piece of hardware. So the unencrypted music is sent to the driver, which plays it. However, because hardware is interchangable, drivers must also be, and it is quite trivial to swap any standard sound-card driver for a driver which makes a copy on your hard disk of whatever unencrypted digital music is played through it. Most users probably won't have the know how to do this, but of course all the pirates will.

So the only answer to this problem is to build the encryption into the sound playing hardware, or permit playback only on special purpose devices. Of course, you'll have to use SDMI approved speakers or headphones as well - you won't be able to use your favorite standard sound transducers because for all the SDMI approved hardware is aware, that transducer might not be an output device at all but just an interface to a device designed to capture the unencrypted sound. But even then there is a weak link which is absolutely impossible to fix with current technology (and, probably, with any future technology) - any pirate worth his salt (apologies for the pun) will just set up a high quality microphone by the speakers and re-record the unencrypted sound that way. The only truly secure digital music system would have to plug right into your brain to make interception impossible! And chances are that if we have the techology to make such implants possible, we'll also have the technology to create brain implants which can take the unencrypted sound out again...

So there you go, it'll never work. One final thing I'll say is that another of the SDMI's bright ideas to combat piracy is to introduce a new type of CD which can't be "ripped" and turned into MP3s as current CDs can - an encrypted CD. The only trouble is that these CDs can't be played on any current equipment. You'd have to buy entirely new equipment in order to play them. They won't be able to introduce these until everyone has a CD player that can read encrypted CDs. Although that's not going to happen any time soon, whenever you have the choice, only buy CD players that cannot read encrypted CDs to improve the chances for freedom in the future.

The SDMI's official website is here.

Library repository

Tuesday, April 4th, 2000

Whoever invented DLLs has a lot to answer for. I suppose they seemed like a good idea at the time - make everything into a library so that you only need one copy of it on your hard disk for all the programs that use it. Unfortunately, this has caused everyone's hard disk to swell with loads of stuff that is never used - you have to have the whole library even if the programs you have only use a tiny part of it. And there's no way to tell what a DLL does just by looking at it, so you can't delete the ones you don't use. I'm sure there's still loads of duplicated code as well, because it's often easier for people to write their own DLLs than to figure out how to use the existing ones. I guess that's closed-source software for you.

In order to keep download times down, software authors often leave out commonly used library files. These can sometimes be difficult to track down, so here I hope to put all those annoying files, as well as a few essential utilities, drivers and decoding/decompression programs. If there's one you think ought to be here and isn't, let me know and I'll upload it. Also if you have a more recent version of a file I have here please let me know.

New 4/4/2000: The files are now in alphabetical order for your convenience.

ARCE.COM (6K) - Decode ARC archives.
ARJ.EXE (75K) - Decode ARJ archives.
BWCC.DLL (43K) - Common controls for Borland software.
CMDIALOG.VBX (9K) - Visual Basic common dialog boxes.
COMCT232.OCX (76K) - Common control activeX control.
COMCTL32.OCX (229K) - Common control activeX control.
COMDLG16.OCX (38K) - Common dialogs activeX control.
COMDLG32.OCX (61K) - Common dialogs activeX control.
DEBOO.EXE (7K) - Decode BOO archives.
DOS4GW.EXE (141K) - DOS protected mode extender. v1.97.
GZIP.EXE (36K) - Decode files with have been encoded with the unix "gzip" utility. Such files are often tarballs, so you might need one of the TAR utilities (below) as well.
Icq V2 (1,397K) - Old version of the ICQ client, suitable for use with older PCs or NT machine you don't have the necessary permissions to install a newer version on.
JAR.EXE (195K) - Decode JAR archives. Not to be confused with the other sort of JAR archive (used with Java) which is actually a ZIP file with the wrong extension.
LHA.EXE (25K) - Decode LZH archives.
MAC.EXE (8K) - Turn Apple Mac text files into DOS text files.
MCI32.OCX (76K) - VB multimedia control v5.1.4319
MCI32.OCX (82K) - VB multimedia control v6.0.8418
MOUSE.COM (12K) - DOS mouse driver. Works with most standard mice.
MSVBVM60.DLL (680K) - Visual Basic 6 runtime.
MSVCR70.DLL (152K) - Visual C 7.0 reuntime.
MSVCP71.DLL (129K) - Visual C++ 7.1 runtime.
MSVCR71.DLL (177K) - Visual C 7.1 runtime.
MUNPACK.EXE (22K) - Decode MIME-encrypted files.
OC25.DLL (246K) - Not sure.
PICCLP16.OCX (23K) - Picture clipping activeX control.
PKUNZIP.EXE (34K) - Essential unzip utility for DOS.
PKZIPFIX.EXE (8K) - Fix (some) broken ZIP archives.
ROT13.EXE (8K) - Decode text files which have been encoded with the ROT13 protocol. Text that has been encoded with ROT13 looks like: jryy, irel zhpu yvxr guvf, npghnyyl.
TAR.EXE (50K) - Extract Unix "tar"balls.
TAR32.EXE (81K) - Extract Unix "tar"balls with long filenames. Requires 32 bit windows.
THREED16.OCX (73K) - 3D custom control activeX control.
UNACE32.EXE (42K) - Decode ACE archives.
UNP.EXE (20K) - Decompress compressed EXE files (compressed with PKLITE, etc.)
UNRAR.EXE (31K) - Decode RAR archives.
VB40016.DLL (460K) - Visual Basic 4 runtime (16 bit).
VB40032.DLL (378K) - Visual Basic 4 runtime (32 bit).
VBRUN300.DLL (224K) - Visual Basic 3 runtime.
WINSCK.OCX (62K) - Not sure, may be a trojan.
Wintalk (190K) - Windows version of Unix talk client.
WW.EXE (9K) - Word-wraps a plain text file so that no line is longer than 79 characters.
ZOO.EXE (25K)- Decode ZOO archives.

Computers I have owned

Tuesday, November 25th, 1997

For as long as I can remember I have been fascinated by technology. When I was young I used to make circuits from batteries, torch bulbs and bits of wire, wood and metal.

Even before our family got its first computer in 1987 (an Amstrad PC1512) I was making the computers at my first primary school do things that few other people could. The wordprocessing package often inserted white blocks into the text when you pressed the wrong key, and these could not be deleted in the normal way. I was often called upon to get rid of them. I also did a lot of programming in "LOGO", the turtle graphics language. I remember writing LOGO subroutines to draw all the letters of the alphabet, and putting them together to write my name!

The Amstrad PC1512 was a great computer for it's time, being one of the most powerful PCs around at the time. It was also one of the first PCs to come with a mouse and graphical operating system (in this case GEM, the same interface now used on the Atari ST computer). The version we had also came with a colour monitor, two 360Kb, 5.25" floppy disk drives and a massive 512Kb of memory. Software supplied was MS-DOS, DOS-PLUS, the GEM suite (which included Desktop, the Locomotive Software's "BASIC2" programming language and GEM PAINT), Migent Ability (the Microsoft Office of its day) and four games (Bruce Lee, Tag Team Wrestling, PSI-5 Trading company and Dambusters). The 20Mb hard disk was an optional extra we did without, and 3.5" floppy disks were unheard of. We also bought a 24 pin dot matrix printer, which came with a wordprocessor called "WordStar".

GEM has now become open source software and can be obtained from here. If you just want to convert your old Paint pictures to a more useful format or run your old Locomotive BASIC2 programs again, try here. For copies of the original Amstrad 1512/1640 boot disks, look here.

I wrote some 200 programs with BASIC2, mostly simple games and graphics programs. There was no ability to make sound apart from a single beep, the frequency of which was fixed. In the years between 1986 and 1994 I discovered DOS, got a copy of Borland Turbo C 2.01 for Christmas (which can now be downloaded from here if you want a small, fast C development environment for DOS), upgraded the computer to a gigantic 640K of memory, bought various computer magazines, added sound to BASIC2 (thanks to Gordon E. Peterson II), drew my first Mandelbrot set, managed to get Microsoft Windows 2.0 running from floppies, eliminated the Dir II virus from my system with only the help of CHKDSK, and wrote my first couple of really playable games - Rockfall, Mr X, the obligatory Tetris clone and Cool Dude. See the Software page if you want to download these.

By 1994, I was getting very fed up with swapping disks in and out and receiving programs on 3.5" disk, which I was unable to use, and programs telling me I needed a more expensive computer to run them on. I managed to persuade my parents to make up the money I needed to buy a new computer, and I settled for a Fountain multimedia 486DX/33 system with a massive 4Mb of RAM, whopping 250Mb hard disk, state-of-the art double speed CD-ROM drive, 16-bit Soundblaster compatible card and Super VGA display system. It also came with the latest software: MS-DOS 6.2, Windows for workgroups 3.11, Encarta 1994 and Microsoft Works. Two years on, and deja-vu - increasing numbers of the programs I used to get every month with my PC Plus subscription refused to run. Unlike the 1512, though, this computer has capacity for expansion. In Easter 1999 it had a serious upgrade, to an AMD K6/2 processor running at 350MHz, 64Mb of RAM, a 4.3Gb hard disk, a 24x CD-ROM drive and Windows 95 OSR2.

In the autumn of 1996 I bought my first laptop, a Compaq LTE Lite/25 with 386SL processor, 80Mb hard disk and monochrome VGA screen. It was a very good deal, in mint condition, second hand, for £100. I thought it would come in very handy at university. Although it seems slow and cramped compared to the Fountain, not having the responsibility of multimedia or many Windows programs meant that I could squeeze an amazing amount of stuff onto the hard disk. Most of the software I had on this computer was highly customised. The machine has now been passed down to my brother Chris.

However, after 2 years, going to the College computer room whenever I wanted to do so much as send an email got to be a real pain in the neck, particularly since all the computers there were either 386s running OS/2 (which they have since replaced with NT machines) or Apple Macs, which crashed a lot and were generally very annoying to use, especially if you wanted to do anything even slightly difficult so after spending the summer of 1999 at work (designing a website for a local company) I saved up enough money to buy myself this - a laptop from Martin Computer Services with an AMD K6/2 processor running at 400MHz, 64Mb of RAM, a 6.4Gb hard disk and a colour 800x600 screen. It usually runs Windows 98 Second Edition, but has on occasion been known to run Debian GNU/Linux.

In the summer of 2001, while doing some coding on this machine, I noticed a funny smell - something like burning rubber. It didn't seem important at the time, so I ignored it and continued with what I was doing. Moments later, smoke started pouring out of the machine's ventilation system! Don't buy unbranded laptops, friends - it's not worth it!

Fixing it was going to be expensive, so I decided I might as well get a new laptop - a Samsung VM8000 with 800MHz Intel Celeron processor, 128Mb RAM, 10Gb of hard disk, 1024x768 screen, built-in modem and networking, and Windows ME. ME, by the way, I would recommend to new users but if you're used to Windows 98 and are happy with it, ME would probably just annoy you - it tries very hard to protect users from themselves, which makes doing anything even slightly unusual exponentially more difficult. It took me weeks, for example, to figure out how to get the UK keyboard layout in a DOS box in the absence of a CONFIG.SYS file. The other thing that annoys me about this machine is that it has a ventilation port on the bottom, so you can only use it on a hard surface. I end up carrying it around on a plastic box so I can use it on my bed, my lap and the sofa. It would have been better if this flat surface had been built in to the machine, as that would have effectively made it lighter and thinner. The only reason I can think of that they didn't is so that the "on paper" statistics for thickness and weight look better.

This machine has since been upgraded to Windows XP so that I can use it to log in to work from home.

I had been meaning to build my own machine for a while, and after working at Microsoft for a while I finally had the money to do it. With some advice from other Microsofties, I put together this machine. It has an Athlon XP 1800+ processor, an MSI KT266A motherboard, 512Mb Crucial PC2100 RAM, a LeadTek GeForce 3 Ti200 video card with 128Mb of RAM, Seagate 80Gb Hard Drive, SoundBlaster Audigy, InWin S500P case, Samsung SyncMaster 700IFT monitor, Epson scanner, Lite On CDRW and DVD (region hacked) drives, floppy drive, 2 ethernet cards and a cable modem internet connection. It has since been upgraded with a video capture card, and 320Gb of additional hard drive. It runs Windows XP usually. I also have a Mandrake Linux partition but I hardly ever use that.