Monday, October 26, 2009

The evil conspiracy ;-) behind customizable metadata columns in Explorer

One of the coolest Windows 2000 UI innovations was a COM shell interface called IColumnProvider which allows developers to write a column handler shell extension for Windows Explorer. By doing this, they could add any custom column to the Details view of Explorer and that column enumerated the metadata out of all items one by one. Users could also sort and group stuff using any column. Two of my favorite column handler shell extensions I used added a file extension column and folder size column. The file extension column is immensely useful when working with mixed files because although Windows has the "Type" column built-in, it denotes the MIME type of the file, not its extension. For example, if I installed Winamp, all my audio files would become "Winamp media files" so sorting by file type to separate MP3s from my WMAs, OGGs and WAVs was broken but sorting by file extension always worked.

The folder size column handler was another heavenly goodie that I simply can't do without. Microsoft's crybaby excuse for not including such a feature out-of-the-box is that it would cause too much SMB chattiness and performance impact on network shares. Fine but that's why Explorer is extensible right? The Folder size shell extension was implemented as a service and cached the sizes of folders in memory upon startup and reported them to Explorer the next time users visited the same directory so any lag/performance impact was negligible, while it updated the size in the background non-obstructively. The developer was also planning to add persistent (on disk) storage of size information so it would not be reset across reboots. Later, the issue of network load was eliminated, as Folder size came with a setting to enable/disable scanning on different types of drives (removable drives, network shares, optical drives). Most other file managers also report directory sizes in columns since long.

But some evil Microsoft person decided to yank IColumnProvider from Windows Vista because of reasons I'm not convinced of, at all. There is no direct equivalent to IColumnProvider now, and there is no way in Windows Vista/Windows 7 to do what IColumnProvider did but the Property System introduced by the Windows Search release in Windows Vista is its somewhat makeshift replacement. Why is Microsoft making life difficult for users and developers? Why are we given less choice, less control than earlier? Whatever happened to Windows 7's pseudo but make-believe "user in control" philosophy? Granted, if the algorithm written by the developer was slow, it could cause Explorer to hang but hey are bad apps totally absent on any platform?

The Property System tries to do what IColumnProvider did beforehand and cache the info to disk, separate from Explorer using the IPropertyStore interface that integrates with Windows Search. But it can only extract metadata which is stored in file streams, there seems to be no way to extract and index dynamic data such as file size that isn't stored inside the file or inside a secondary stream. The result? All such extensions which used IColumnProvider are broken and forgotten. This valuable functionality seems to be lost with Windows Vista. Microsoft has simply turned a blind eye and a deaf ear to the rants of the Folder size developer. I guess Windows XP is here to stay till Microsoft listens.

P.S.: Another bonus feature the Folder size shell extension offered was the ability to display file sizes for files above 1 MB and 1 GB respectively in MBs and GBs instead of the dumb "KB" used by Explorer.

Disclaimer: All mentions of "evil" on this blog are tongue-in-cheek as in I don't think Microsoft is an evil corporation.

1 comment:

Anonymous said...

Nothing upsets me more than developers who 'know what the user wants'. Sorry guys (MS included) we are the users and only we are competent to decide what we want. If, if course the developer is too incompetent to provide/maintain efficiently the facility, well that's a different issue