Martin Pool's blog

OLS Audio

Audio recordings from Ottawa Linux Symposium are now up.

Hopefully LCA2004 audio and video will be up someday.

For LCA2005 we're planning to do both audio and video. Ryan Verner is doing the video again this year. His production from the previous conference looks pretty good but the amount of organization required for good video scares me a bit. Personally I think I'd rather have moderate-quality audio promptly than anything else later.

LCA Ghosts

LCA2005 hosted the ghosts of conferences past this weekend; many friends from Linux Australia were in Canberra to give feedback on our arrangements. LCA Convenor Steve Hanley has more details on his diary. We should have a Planet aggregator of LCA news some time soon.

LCA is coming along well. The call for papers/tutorials/minconfs is now open — go ahead and submit something cool.

Steven's friend Niki Gudex was on the recent UA flight that was turned back to Sydney after attendents found a sickbag with the word BOB written on it. I wonder if MAXIM model Niki was the Babe On Board that may have been described by the letters?

serial/network console on rx2600 linux

Getting the serial/network console to work on rx2600 is more difficult than it should be.

The trick is:

Use the EFI menu to configure exactly one UART as the input/output/error channel. (I find it works better to use the PCI rather than PNP hardware path, but that may be just superstition.)

Choose Cold Reset from the EFI menu. Merely booting Linux after changing the devices won't work!

Boot with linux console=ttyS0.

What's he building in there?

(Cue Tom Waits)

More on vmunix.com

PyRXP and XML as tuple trees

PyRXP has an interesting way of representing XML documents as Python tuple trees. It makes data encoded as XML pretty easy to deal with. Unfortunately it does not come with Python or Debian and you need to build the rxp library first.

Dave Mertz introduces PyRXP.

Uche Ogbuji has some criticisms of its handling of Unicode, and pointers to related tools.

XmlMarshaller also looks pretty interesting and is pure Python.

Dos and Don'ts for Photography

Tim suggests: Dos and Don'ts of Photography. I don't know if it's serious but I like it.

Cremaster cycle

We went to see the Cremaster Cycle (episodes 4 and 5) in Sydney this weekend. How can something be so interesting but so tedious?

Thinking later: it's not a movie. There's no narrative. It is, as Stephane said, art made with film, not a film.

If it was playing on a screen in a gallery it might be understood as art not film, and one might look at it and look away and find the repetition less tedious.

If you get irritated with double-quotes around art, film and meaning, this may not be for you. If you can put handle that, you might enjoy Cremaster. The more I think about it, the more I like it in retrospect.

Open source as natural monopoly

Andrew Morton raised an interesting idea in his OLS 2004 keynote: systems software tends towards a natural monopoly, for several reasons.

  1. Developers don't want to write for platforms that are going to die off. At the moment Linux and Win32 are likely to be around for at least five years; beyond that it's unclear. So people developing software want to bet on the safest choice; this is a self-reinforcing effect. Similarly for people choosing platforms to use.
  2. Conversely, once you have invested in learning how to use an OS and its applications, or in hardware to support it, you don't want to switch.
  3. Operating systems are defined in CS101 as providing an abstract interface between hardware and applications. Standardizing that layer allows for good competition in both hardware and applications, thereby making the whole stack more appealing.

It's all very well to talk about avoiding lock-in, or standard interfaces, but it's a matter of degree. There is always at least a risk of problems if you try to switch.

Some people like to imagine a world where AmigaDOS, Mac OS, OS/2, Windows, Linux, BSD, etc all happily compete. Andrew points out, and I agree, that such a situation would never be stable.

Given that there will be a monopoly, that monopoly can be either owned by a single company, or it can be a public commons.

Spammer's advice column: choosing an OS

69 N   Aug 24 Stacey Hopper ( 134) never use illegal Windows software

Great idea

Liberal Media Bias

John Sequeira says that I write a lot about version control (which is true) and that I have a bias towards distributed version control, which is also true.

  1. Distributed development is the whole point of open source. People should be able to contribute without needing prior permission; and to work with you even if they're on another continent.
  2. I live in Australia, also known as the arse end of the earth. Roundtrips to the US are slow. I don't want to spend any more time waiting for CVS to open an SSH tunnel if I can possibly avoid it.
  3. Version control, properly conceived, ought to offer distribution at no added cost. Andrew Morton's quilt does it in a couple of hundred lines of shell. Given you can have it for free, why not? It might be useful. The challenge is to make it sufficiently simple and reliable, but I think some new systems come close.
  4. Cheap branches can be useful; distributed systems where they need never leave your workstation are a good way to get it.

I really should try Monotone (again) and Svk.

To be fair, here's what I like about Subversion:

  1. It is extremely easy to learn if you're used to CVS. If you work with people who see VC as a cost, rather than a benefit, then it may be the easiest switch.
  2. It fixes the most annoying parts of CVS: you can rename files, version tags, etc.
  3. There is a good book, a selection of GUIs, and it runs on many platforms.

On the downside, it is a bit prone to crashing and you get something only incrementally better than CVS.

Labour and porn

From the Australian last week, via AJ

All internet service providers would be forced to block hard-core pornography reaching home computers under a radical plan to protect children being pushed by federal Labor MPs.

Yobbo gets to the nub of the matter; see also Jason Soon and Mark Gallagher.

Why doesn't some enterprising ISP offer a filtered service that concerned parents and schools can use? Surely this already exists? It wouldn't require any technical knowledge on the part of the parents. It also wouldn't impose any additional cost or suppression of free speech on adults who choose not to use it.

If anyone was worried about people accidentally seeing offensive material surely punishing spammers would be a more useful step. Just the other day two people on a samba mailing lists were annoyed by porn spam.

I listened to Hamilton's interview with JJJ, but there doesn't seem to be a transcript available. However, there are similar opinions in this Australian opinion piece.

The report that inspired this Labor move seems to still be secret, but a gaping nonsequiter is apparent in Hamilton's public statements. He says that sexual images encourage teenage boys to think about women as sexual objects — already a dodgy assumption. But then he proposes banning only the most hardcore porn, and allowing good healthy erotica. Surely if we wanted to try to make teenage boys not obsess about sex we ought to ban all depictions of the human form: no page-three girls; no underwear ads; no olympic beach volleyball or diving. Burqa, anyone?

By the way: why on earth is a government-funded report secret from the taxpayers who paid for it?

The Tor onion-router

The inventors of Tor make the penetrating observation that for crowd anonymity to work, you need a large crowd. You have to be able to attract many people who may not have strong requirements but who can provide cover traffic. So it needs to be possible to use it in a way which doesn't have horrible response time, which Freenet apparently hasn't reached. It also needs to be easy to install, which is where Freedom's kernel module design failed.

"Usability is not only a convenience: it is a security requirement."

hp msa1000 on Linux

I've been setting up an hp msa1000 Fibre Channel disk array with one of our Linux machines.

Here are some entirely unofficial notes. If you're actually setting such a unit up, please don't rely on these at all but rather go and read the careful and detailed hp instruction manuals. This is just an overview. (My first hint is that the manuals are mostly not in printed form, but rather on a CD in the little box.)

The msa1000 is basically a rack-mount box with controllers, gianormous power supply/blower units, and about 14 SCSI disks. It can be configured to have no single point of failure with redundant power supplies and lines, redundant disks, mirrorred controllers, and mirrored data paths. Or you can simply attach it directly to a single machine, as I am doing for testing.

There are two SCSI ports on the back which you can use to attach additional disk enclosures. You cannot use these to attach it to a computer. With a firmware upgrade you can also attach SATA enclosures which give you slower, possibly less reliable but much cheaper storage. This sounds like a good deal to me for some applications: RAID is meant to be a redundant array of inexpensive disks, and the msa1000 lets you do the redundancy without too much trouble.

The msa1000 attaches to a computer through the Fibre Channel port on the back of the controller. You can either connect this straight through to a FC Host Bus Adapter PCI card on the computer, or you can go through an FC switch, allowing several machines to share the storage.

From the point of view of the host, the msa is basically a big block device, like a SCSI disk. The computer can't directly see the 14-odd disks inside the array though: it sees a RAID abstraction of those disks presented by the controller. This logical disk is called a unit.

Before you can do anything useful from the host, you need to configure the msa and make a storage unit. There are two ways to do this: either by running some hp software (Insight Manager or Array Configuration Utility) on the host, or by connecting to the serial console on the front. (The serial console needs a special RJ11 cable which comes in the box.) I used the serial console.

The main operation you need to do on the serial console is an ADD UNIT command, which allocates some of the disks for storage. I made a single unit out of all of the disks, with one RAID-5 redundant disk and one hot spare. This is exposed to the Linux host as a SCSI LUN.

You may be able to ask Linux to rescan and hot-add that device. That didn't seem to work with the old kernel on my machine so I just rebooted, and it discovered the disk as sda. It looks like there is no partition table for these units.

At this point I suppose you have a choice of doing Linux LVM or simply creating a filesystem directly on the device. It may seem a bit redundant to run Linux LVM on top of hardware RAID, and perhaps it is.

On the other hand LVM is more flexible than the raid system done in hardware: for example LVM can reduce the size of a logical volume, but the msa firmware cannot.

I'm going to try XFS on this disk for testing; apparently it performs well on big arrays. I may have some results later.

This kind of array can also be simultaneously accessed by multiple machines running something like GFS, Lustre or ClusterFS but I'm not trying that now.

p.s. sneakums asks:

I'm not familiar with these units, but can one not just fdisk it like any other disk? Even if I were only going to use a single partition, I'd be inclined to partition anyway for consistency's sake.

I kind of agree about consistency, but on the other hand a partition table is one more thing you can get wrong if you try to expand the array later.

In a brief look I could not see any advice from hp on whether you should make a partition table on the logical unit or not.

I forget if it matters to LVM itself, but it's typical for LVM PVs to be partitions of type 0x8e. If you were to use MD to stripe across a bunch of these units, you would have to partition for array autostart to work, since MD will only consider partitions of type 0xfd.

Right, but since you cannot (?) boot off these devices I don't think autostart matters too much, and without autostart the partition types don't seem to matter.

Trying to create a GPT table (common on ia64) fails with an IO error, but creating a DOS partition table works. Micah Parrish tells me

This is due to a longstanding 2.4 kernel bug where it is impossible to read or write to the last block on devices with odd numbers of blocks, such as an MSA1000 logical unit. There is a kernel patch floating around which adds a couple of ioctls allowing you to access these blocks directly, but it isn't in the kernel.org sources. One rather old version of it is at this url.

This should be fixed more elegantly in 2.6 kernels. Parted has some special code to use the ioctls on 2.4 kernels. I believe that Red Hat and SuSE include the patch in their 2.4 kernels, but debian may not.

Backlinks

OpenACS thread about changing VC systems. To answer some points they raise:

Web as secondary storage

Michael Davies liked my idea of the web as a knowledgebase, and draws a good conclusion: a primary reason to put stuff in is because you yourself will want to get it out again.

If I have something I know, and it's not particularly secret or private, then the easiest way to remember it is to put it on the web and let Google (or the web, collectively) remember it for me. And not just remember it, but also possibly make interesting connections to it (much as human memory does.)

Writing on the web seems very much like a stream of thought, and likely to become more so in the future: it's more about connections and recall than about careful indexing or categorization. It progresses over time but we revisit the past more by linking back to it than by rewriting it.

Do you go back and redraft yesterday's thoughts? Maybe, if you're writing a more-formal paper, but generally no. Or are you randomly reminded of things you thought before, rethinking variations on them, rhyming and riffing, building associations? ...

The web may become more like thought as it becomes easier to casually publish (blogs, camphones, ...) and as the tools for retrieving information become better.

Web as knowledgebase

Jakob Nielsen says:

Increasingly, the Internet user experience is becoming one of dipping a toe into websites rather than truly "visiting" them. Using search engines as their Web interface, people simply grab query-related nuggets from sites, but don't engage with the sites themselves.

An exception to this is when people are genuinely browsing, rather than searching — flipping around just looking for something unexpected and interesting or amusing. I suspect strong starting points for that are either portals, news sites, or blogs, since all of them have high and ordered fan-out links.

For search engines, becoming the user interface to the Web's embarrassment of riches is good news. It's also good news for users, who can find answers by visiting a few search hits rather than enduring the obscure design and poor navigation found on many sites.

I think you can see the web as being one big freeform knowledgebase. Web servers are the insertion tool and search engines are the query tool.

Viewed like this, the whole thing is ridiculously inefficient and poorly designed, but it probably scales up more than any single system could. It's like a Wiki taken to a new level: anyone can write; anyone can comment; there's no central control. If I feel, say, free memory on Linux is insufficiently explained, I can throw something into the pot and people who want it will find it.

Nielsen sees this as a bad thing for web sites, but I disagree. I do agree with his concrete recommendations about making site easy to search, making it easy to find related data, and so on.

It's bad for people who design awful flash intros, since they're likely to be skipped entirely. Good riddance.

It probably means people will look at less pages from any single site, but I don't see that as necessarily bad. I ask: why are you publishing anything at all? Because you want people to have the information, and/or to have the information from you. I don't see why it makes any difference if they spend more or less time looking for information.

If you're trying to sell something and people find that page immediately rather than by wandering around your site, all the better. If you are trying to push a opinion or establish your credentials in a particular area then search can only help.

Gold-medal hyperlinking idiocy

Dan Gilmore:

By introducing a link to the ATHENS 2004 official Website on your site you are agreeing to comply with the ATHENS 2004 Website General Terms and Conditions.

In order to place a link embedded in copy interested parties should: [....]

c) Send a request letter to the Internet Department.

mp3blogs

Free mp3s on blogs.

devlabel

devlabel [manual] looks really elegantly simple: get hotplug events in userspace, find a unique identifier for the device and use it to make a symlink /dev/work -> /dev/hdb2. They can use various methods for finding the true name of the device including looking for filesystem UUIDs or labels. (I have only read about it, not used it, so I might be entirely wrong.)

If this works, it might solve the icky problem I had yesterday: adding a new SCSI array to a system made all the other device names changed, so they needed to be manually reassigned.

A related problem is that the order of probing for some SCSI drivers seems to have changed between 2.4 and 2.6. So on 2.4 the drives attached to say Symbios get detected as sda and sdb, but on 2.6 the QLogic gets detected first.

Let's hope devlabel gets into Debian soon.

Like everything else, Linux sucks but it can be fixed: truly a creature of growth and capable of sweetness, to ooze juicily at the last round the bearded lips of God [Anthony Burgess].

I suppose the one thing this doesn't fix is finding the right root partition. Maybe it might work with a cunningly crafted initrd.

Something similar has been done before in things like vold but maybe now it can be broadly adopted. Unlike vold, devlabel doesn't seem to use a polling setup.

That interview

Jason Kottke has the notorious Google/Playboy interview. I don't know if much of the content will be new to people who have been following Google, but the very fact that these questions are asked by Playboy demonstrates some kind of success.

Ultimately you want to have the entire world's knowledge connected directly to your mind. — Sergey Brin.

The pros and cons of capital flight

The Economist writes on the folly of specially-established capital cities.

Purpose-built capitals also struggle to create a cultural life of their own, especially since the politicians and their flunkeys tend to fly back to their constituencies at the end of each week's parliamentary sessions, leaving the city half-deserted. On seeing the young Canberra, a reporter from Britain's Punch magazine quipped: Londoners may be all too aware of the disadvantages of living in a city without a plan, but these cannot be compared with the rival disadvantages of living in a plan without a city.

Hugh and Lucy have blogs

Hugh and Lucy Blemings have blogs now too.

Chris had a curious encounter with a towel pig.

$10000 worth of dogfood

My day job is developing Linux software for hp Itanium2 servers. I'm going to try using an hp zx6000 as my workstation.

Initial impressions: (strictly my personal opinion):

The hardware is very tidy indeed. Clearly a lot of thought went into the mechanical design.

The machines have really neat manageability support: an onboard service processor so that you can get to the bootup and OS console over the lan and similar tricks.

Sadly the firmware support for this is less friendly than it might be. I think everyone who has tried to install such a machine has had the experience of the machine hanging at bootup... except it's not really hung, it's just talking to the wrong console port. Once you find and follow the right instructions it's fine. (Installing Linux on hp Itanium 2-based Servers and Workstations may be the right one, or you may find an update on hp.com.)

It's very quick. I have not run it back to back against a brand-new top-end Xeon or Opteron but it's much faster than most PCs.

My unit has a FireGL card, which seems to have only binary drivers, which is a pain if you need to run anything but the specified redhat release.

Thank goodness for Debian. Having a single system which is freely available and nearly the same across different hardware is great.

Spamusement rocks

jmason pointed out Spamusement: truly a thing of beauty.

Subject: Where did you go?

Why doesn't free memory go down

I wrote a little while ago about interpreting swap usage on Linux. A related question is why Linux always seems to have so little free memory. Does this indicate some kind of problem in Linux or the application? No.

Someone at work asked (paraphrasing):

I have a process that uses a lot of memory while it's running, so the free memory (shown by free or top) goes right down to 60MB out of 8100MB. But when the process exits, the free memory doesn't go back up. Why isn't memory released when the process exits?

The short answer is that you should never worry about the amount of free memory on Linux. The kernel attempts to keep this slightly above zero by keeping the cache as large as possible. This is a feature not a bug.

If you are concerned about VM performance then the most useful thing to watch is the page in/out rate, shown by the "bi" and "bo" columns in vmstat. Another useful measure (2.6 only) is the "wa" column, showing the amount of CPU time spent waiting for IO. "wa" is probably the one you have to worry about most, because it shows CPU cycles that are essentially wasted because VM is too slow.

As you said, linux is keeping the free memory into buffer cache, but when there is no process running how come the buffer cache is having 4GB and how it is released 3GB to free memory.

Disk cache is maintained globally, not per-process. Files can remain in cache even after the process that was using them exited, because they might be used by another process. Freeing the cache would mean discarding cached data. There's no reason to do that until the data is obsolete (e.g. files are deleted) or the memory is needed for some other purpose.

After a while the free memory goes back up again.

Pages only become free when they're evicted to build up the free pool (see below), or when nothing useful can be stored in them. If there are gigabytes of free memory then the main cause is that the kernel doesn't have anything to cache in them.

This can happen when, for example, a file that was cached was deleted, or a filesystem is unmounted: there's no point keeping those pages cached because they can't be accessed. (Note that the kernel can still cache a file which is just unlinked, but still in use by applications.)

A similar case is that an application has allocated a lot of anonymous memory and then either exited or freed the memory. That data is discarded, so the pages are free.

Note that flushing the data to disk makes the pages clean, but not free. They can still be kept in memory in case they're read in the future. (Clean means the in-memory page is the same as the on-disk page.)

The guy in the second row asks:

So if Linux tries to keep the cache as large as possible, why is there 60MB free rather than zero? Wouldn't it be better to cache an additional 60MB?

Linux keeps a little bit of memory free so that it is ready as soon as it needs to allocate more memory. If the extra 60MB was used for cache too then when a new allocation was required, the kernel would have to go through the cache and work out what to evict. Possibly it would need to wait for a page to be written out. This would make allocation slower and more complex. So there is a tradeoff where the page cache is made slightly slower so that allocation can be faster and simpler. The kernel keeps just a few free pages prepared in advance.

(If you have any questions mail me and I'll try to answer them here.)

Palm T3, going cheap

I have a brand new Palm Tungsten T3 that I don't need. Want to buy it?

This has four times as much memory as my first PC, and a thousand times more than my first computer. Amazing.

Phil Agre on professional leadership

How to Be a Leader in Your Field — might also be subtitled How to find interesting work.

Three great books

I read three superb books on my recent long flights:

The Remains of the Day

The Bridge

Middlesex

I didn't plan this but they all turned out to have a similar feeling.

I watched Last Year at Marienbad last night, which shares this flavour too.

Kia Optima

I had a Kia Optima rental the other day. I have to say it was surprisingly good; at least much better than what one might expect for that price range. Nice little engine well-matched to the chassis; pretty comfortable.

warn_unused_result

gcc has a neat attribute that helps you check that function return codes are used.

For example, I have a function dcc_timeout_arm in distcc which uses longjmp and so returns a second time with an error if the timeout fails. So it's absolutely critical that the error return code be checked, or the code can't possibly work correctly.

In a earlier draft of the code I forgot to check it in some places. Unfortunately for me the non-error path works fine, but the error path would always fail. Of course error paths are notoriously poorly tested.

Therefore:

#ifdef __GNUC__
#  define WARN_UNUSED  __attribute__((warn_unused_result))
#else
#  define WARN_UNUSED
#end
...
int dcc_timeout_arm(int timeout, int) WARN_UNUSED;

So this gives a warning:

dcc_timeout_arm(5, DCC_PHASE_CONNECT);

and this is correct:

if ((ret = dcc_timeout_arm(5, DCC_PHASE_CONNECT)))
    goto out; */

Great stuff. In terms of Rusty's module interface continuum, we just went from "6: follow common convention (check return codes) and you'll get it right" to "2: compiler will warn if you get it wrong." Build with -Werror and you get up to "1: the compiler won't let you get it wrong."

I hope gcc gains more attributes like this in the future. It would be good to get things like in Splint to check more invariants.

I had thought it would be nice if there were a global option to warn about ignored return values. The gcc team say it's not good, and on reflection I agree:

10.11 Certain Changes We Don't Want to Make

[....]

Warning when a non-void function value is ignored.

C contains many standard functions that return a value that most programs choose to ignore. One obvious example is printf. Warning about this practice only leads the defensive programmer to clutter programs with dozens of casts to void. Such casts are required so frequently that they become visual noise. Writing those casts becomes so automatic that they no longer convey useful information about the intentions of the programmer. For functions where the return value should never be ignored, use the warn_unused_result function attribute.

Treskilling Yellow

From Wikipedia:

The "Treskilling" Yellow, or 3 skilling banco error of color, is a postage stamp of Sweden, and as of 2004 the most valuable stamp in the world. At a price of 71 billion US dollars per kilogram (as of 1998) it is one of the most valuable things in the world by weight and by volume.

"Designing Web Usability"

I'm reading Jakob Nielsen's Designing Web Usability: The Practice of Simplicity.

Most importantly, he says: be brief. Brevity makes for good writing in general. On the web it is even more important since screens are harder to read than paper, and the web encourages distraction.

The book itself is very attractive, on heavy stock with screenshots of various good and bad designs. It might be the first coffee-table book with genuinely useful and important content.

Why don't more people follow his recommendations?

LCA 2005 Call for Papers open!

The linux.conf.au 2005 Call for Papers is now open! Please propose something cool so that we can enjoy listening to you in April next year in beautiful Canberra.

Bribes are gratefully accepted... but must come in the form of cool open source software. (Or Islay whisky is also persuasive.)

OSCon, OLS and LCA

I just got home from Ottawa Linux Symposium and O'Reilly OSCon.

OLS was very good. It's more kernel-oriented than LCA, kind of sticking to the strict definition favored by rms that Linux is the kernel, not all the associated software. About two out of the three streams were kernel-oriented. There's also quite a focus on big machines, because I suppose that's where a lot of the money is. Ottawa was really beautiful.

OSCon was pretty good. It's about four times more expensive than OSCon, and probably not four times as good, at least for me. It's very inclusive of all open source work, not just Linux. Many people had Macintoshes, and most of them were even running Linux. They have a slightly ridiculous number of parallel sessions - about 12? Still, I guess it works: there was always something I wanted to see. Lots of stuff on scripting languages.

I have a vague sense that it's about the buzz of open source, not actually about open source.

Paul Graham's talk was good. The SCO moot court was good.

There was a panel debate about open sourcing Java, but I think I'm not the only person there who felt so what? If Sun feel a not-quite-free licence suits them best, let it be. My impression from OSCon is that the most interesting work may be in Perl/Python/Ruby on top of Parrot/Mono/Rotor/CLR.

There are people outside each room at OSCon checking ID, which gives it a slightly regimented feel. I guess since they're charging so much, and they need to make a profit, it's necessary.

Meg Hourihan shares some thoughts on conference design. It's hard.

The City of Books

I went to Powell's in Portland. This is a very large bookstore: one city block, plus one other building for technical books. It's intimidatingly large at first: where do you even start looking?

I spent over an hour there and did not get off the first floor.

stacked books

Exostructure

Arch vs tla

Google asked me: what is the difference between arch and tla?

The short answer is that they are two names for the same thing. The project was originally conceived of as arch: I suppose the idea of an arch connotes elegance, and it has a r-c sound to suggest revision control.

However arch is already in use as a command on Unix: it prints the machine architecture (e.g. i686). It's kind of a waste of a word, but nevertheless it exists and is depended upon by some scripts. So the program can't be actually called arch. For a while it was called larch, and there were forks with different command names. Some people say that Arch is the design and tla is the implementation.

Now it has settled on tla, which is either Tom Lord's Arch, three letter acronym, or doesn't stand for anything at all.

The short story is that Arch and tla are interchangeable when talking to people, but for computers you need to spell it tla.

Archives 2008: Apr Feb 2007: Jul May Feb Jan 2006: Dec Nov Oct Sep Aug Jul Jun Jan 2005: Sep Aug Jul Jun May Apr Mar Feb Jan 2004: Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan 2003: Dec Nov Oct Sep Aug Jul Jun May