« April 2003 | Main | June 2003 »

May 25, 2003

Electronic Toys

I've decided to spend some money on a good home theater system. Some might consider that odd, as I don't really watch that much television. Why spend the hard-earned wages on something that may be somewhat superficial?

There are a couple of good reasons, I think. The first reason is necessity: I do not currently have a television, receiver, or speakers for my living room. Thus, I need to get something. The second reason is a "life-style choice": If I am going to purchase something for my home (for my life), I should aspire to the best. The third reason implies a reward for good behavior: I work very hard, and sometimes very long, and it is pleasing to think that my work is translated and crystallized into something pleasing. (I suppose that is a similar reason why I sometimes want to pick up the bill in restaurants, or take my girlfriend to interesting places.) The fourth reason relates to art appreciation: I like listening to good music (having played saxophone in classical and jazz groups), and so I believe that my ear may be better trained than some. The fifth reason is simply that I am a technology junkie. And the final reason is pragmatic: I can afford it, without endangering my other ventures.

I admit that I didn't know that much about home theater systems. Several weekends ago, I went with my knowledgeable friend, Andrew, to various stores in the west Los Angeles area. One of the critical locations was a Ken Cranes store, where the salesman took the time to explain and display several options. (Of course, as a salesman, he tended to push my spending envelope.) I decided that my "starter kit" would consist of a television, a receiver, speakers, and the wiring needed to bring them all together.

KV32HS510The television chosen was the Sony KV32HS510. This has a 32 inch flat screen, accepts component video, and is high-definition ready. I was very impressed with the picture quality while in the store. (Let's see how it turns out in my living room.) One reservation that I had was that it is a 4:3 screen, rather than the wide screen that is superior for watching DVDs. But it is advanced technology, and I hope believe that the 4:3 format is reasonable enough for now.

Denon 1803 rearThe brains of the home theater system is the receiver. It seemed like the closest high-quality receiver that I could get for reasonable amounts of money was the Denon 1803. It has all of the optical and component inputs, as well as the smarts to handle and power good quality speakers.

Bowers and
Wilkins 602 Good quality speakers are expensive. The standard setup seems to be three front (left, center, right), a subwoofer, and two rears (left and right). I decided to start with just the front right/left, and get the subwoofer and rears later. I listened to the Bowers and Wilkins DM602S3 front speakers, and was impressed at the quality of sound. These are bookshelf units. The floor-standing units might have had marginally better bass sounds, but I couldn't justify the difference in price. (If I get the subwoofer someday, it will be a moot question, anyway.)

With home theater (as in most things, I think), one pays increasing amounts of each marginal bit of performance. A $500 receiver might be much better (in performance and available options) than a $100 unit, but can one really tell the difference between it and a $1000 unit? Some might, most probably would not. It does seem like there are different plateaus, though: If one can get on the bottom edge of the high-end stuff, than maybe the majority of the benefits are available without paying for functionality that is unneeded.

In any case, I want to make sure that I configure my equipment properly. The Avia Guide to Home Theater DVD from Ovation Software seems to be a popular choice. It contains test patterns for television and test sounds for the audio subsystem, and even comes with polarized colored samples to assist in proper color configuration.

The equipment arrives next Saturday. I hope that it will be worth it, and I look forward to hosting a football gamewatch party or just listening to some good music.

May 20, 2003


This past weekend, I finally resolved to fix a leaky faucet in my bedroom bathroom. It has turned into a "learning experience" (which, in this context, is code for multiple trips to Home Depot).

My bathroom faucet is a normal sort of faucet, with separate handles for the hot and cold water. The handles drive an O-ring into a fixed washer seat, which shuts off the flow. Because the hot water side was leaking, and I haven't had much trouble with it before, I assumed that the washer was worn out. It is a fairly simple matter to replace a worn washer. One guide to doing such a thing is here.

I had not planned on the breaking the unit. There was a decorative metal plate around the base of the valve handle, which was screwed on to the valve assembly (figure 1). When I turned the decorative plate, to remove it, I ended up turning the valve assembly, which twisted and broke the pipe connecting the hot water valve to the mixing pipe. (Figure 3.)

This dismayed me, of course. A simple project had become much more complex. Because the faucet was from the 1970's, and the cold valve has had many problems, too, I decided to completely replace it.

The spirit may be willing, but corrosion has proved stronger. It took me several hours to remove the entire hot valve assembly. I've been unable to get the cold side... First, the decorative plate was too tight to easily turn off. After several long bouts with an adjustable wrench, I finally managed to semi-destructively remove it. Now, there are two more plates, one on the top of the sink and one below, that are screwed together to hold the valve in place. I cannot turn either of these: They are thin (so I can't get a good grip with my wrench), and so corroded that I doubt that anything could turn them. I might need to bring in the hacksaw.

On the plus side, I can demonstrate that I have learned. On Monday, I fixed a leaky faucet seal in another bathroom, with no problem.

Figure 1 - Sink with valve handles removed. Note the decorative plate still on the cold water side.

Figure 2 - Underneath the sink. The hot water shutoff valve is on the left, and the cold water shutoff valve is on the right.

Figure 3 - Broken line between the hot water valve and the merge with the cold water.

May 18, 2003

MT-MostVisited Plugin

This plugin determines the most popular entries on your blog, based upon the results of the Apache webserver access logs. It makes this information available via the MTMostVisited container tag, which can contain MTMostVisitedCount and MTMostVisitedLink tags, as well as any MTEntry-type tags.


    <MTMostVisited blogurl="/blog/archives"
       <li> <a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a>
            of <MTEntryDate format="%B %e, %Y">
            (<$MTMostVisitedCount$> hits)


This plugin determines the most popular entries on your blog, based upon the results of the Apache webserver access logs. It makes this information available via the MTMostVisited container tag, which can contain MTMostVisitedCount and MTMostVisitedLink tags, as well as any MTEntry-type tags.

This information may be interesting to display, if some of your most popular entries do not have many comments, or if they have fallen off of your index page.

Please note: Your webserver must be Apache for this to work, and Apache must be configured to output log information. (This was the default for Redhat Linux, at least, and I expect it to be true for the majority of sites running Movable Type.)

Tags made available through this plugin:

  • MTMostVisited - Container tag, which loops through the most-requested pages on your blog. It has a number of attributes, which will be enumerated later.
  • MTMostVisitedCount - Returns the number of hits that a particular entry has received. Used in conjunction with MTMostVisited.
  • MTMostVisitedLink - The URL of the particular entry. Used in conjunction with MTMostVisited. The MTEntryLink or MTEntryPermalink tags can be used instead.
  • MTEntryXXX - MTEntry tags can be used within the MTMostVisited container, too.


The plugin is available (as a zip archive) here.

To install, place the mt-mostvisited.pl file in your Movable Type 'plugins' directory.

This plugin also requires Akira Hangai's Apache::ParseLog module, available via CPAN, www.cpan.org. This can either be installed within your server's Perl libraries (if root access is available), or placed within the extlib subdirectory of your Movable Type home. I.e. the total installation should look like:

  • (mt home)/plugins/mt-mostvisited.pl
  • (mt home)/extlib/Apache/ParseLog.pm

Refer to the Movable Type documentation for more information regarding plugins.

The apachelog.pl script, included with this distribution, is a command-line Perl script that also parses the Apache log. It outputs to the console, thus making it easier to check the configuration of the plugin. It is NOT needed to implement the Movable Type functionality.


The configuration of the plugin is done via attributes of the MTMostVisited element.

  • filetype - This specifies the extension of your individual archive files. It defaults to "html". This can also be a regex-like expression, like "html|php". (Thanks to Eric James Stone for the regex suggestion, and sample implementation.)
  • blogurl - This specifies the URL of your individual archive directory, relative to your domain name. For example, if your individual entry archives can be found by going to the URL http://www.borlik.net/blog/archives/000001.html, then the blogurl should be "/blog/archives". Note that the trailing slash should not be present. Also note that this will be used within a regular expression, so multiple directories can be searched with the right wildcards. For example, if you store your individual entries in category directories (e.g. "/blog/archives/work" and "/blog/archives/play"), then you can use a regex wildcard like "/blog/archives/.*". (Please let me know if that functionality does not work intended.)
  • logfile - This plugin needs to know the location of the webserver hit logs. The logfile attribute is used to specify that location on the server. Note that the wildcards are acceptible, if you have multiple logfiles (e.g. rotating logs). An example would be "/var/log/httpd/access_log*". If you are not running your own server, ask your host for help.
  • ziplogfiles - This attribute is similar to the "logfile" attribute, and used in the same way. Some webservers automatically gzip older log files. Logs specified with this attribute will be unzipped and interpreted correctly. Please note that this assumes that the server has gunzip installed in the default path and that a temporary file can be written to the current directory.
  • count - This specifies the number of entries to enumerate. By default, only the top ten will be listed.
  • cleanbuild - If set to "1", then plugin errors will be written out as HTML and template processing will not be interrupted. This can be considered to be a debugging utility, perhaps. Some errors, such as missing requirements or Perl compilation errors will still screw things up.


Some webserver log files can be quite large, especially on a popular site. This plugin may slow down your blog rebuilding. It hasn't been a problem for me, but then again, nobody likes me.

One technique, suggested by Eric James Stone on the gday mate website, is to create a separate template just for the MTMostVisited section, and use the MTInclude directive to include it in one's index page. The extra template can be rebuilt separately (maybe once a day or something, and possibly via the various build scripts that are out there). Such a technique is a necessity if you wish to include MTMostVisited stuff on individual archive pages. The MTFastInclude plugin may be useful for this, too.

Monthly archives are not handled well, nor are popup-image pages. (A critical assumption of this plugin is that all of the files within the archive directory - $root - are named according to their entry id's.) Because the monthly archives are named differently, the plugin is unable to load them in, in order to process MTEntry-type tags. This hasn't been an issue for me, since my most-accessed files are individual archives.

THE MOST COMMON MISTAKE is not installing Apache::ParseLog. Without that module, this plugin will break. (Does anyone know of a way of detecting if a module exists?) This often results in a compile error, with a strange error message (such as "You used an MTEntryLink tag outside the context of an entry" or some such nonsense). (The correct Perl compilation error is dumped into the webserver error log, but not shown to the MT user.)

Any assistance or suggestions would be appreciated. In particular, I would like to offer this plugin to bloggers who use entry titles rather than entry ID's for the naming of the archive web page.


Copyright 2004, Jeffrey Borlik. All rights reserved.

This program is free software; You can redistribute it and/or modify it, as long as this copyright notice is kept intact and the original author is given credit.


This package is so distributed WITHOUT ANY WARRANTY in that any use of the data generated by this package must be used at the user's own discretion, and the author shall not be held accountable for any results from the use of this package.


I would like to give credit to Timothy Appnel, whose MT plugin article was quite helpful, and to Brad Choate, whose MT-SQL plugin served as a useful starting-point for integrating the MTEntry tag functionality. Akira Hangai's Apache::Parselog made this plugin possible, of course. And there have been many users who have offered useful ideas and sample implementations, including Ian Fenn, Zack, and Eric James Stone.


  • 1.0 - Initial release
  • 1.1 - Removed unneeded $conf parameter
  • 1.2 - Ignore nonentry pages (via a test for only digits)
  • 1.3 - Removed pod, and greatly improved error messages
  • 2.0 - Moved configuration out of plugin. Allow wildcards for most configs.


MT-MostVisited was written and is maintained by Jeffrey Borlik. Please feel free to email me with problems or suggestions.

The latest version of the plugin archive can be found at http://www.borlik.net/~jborlik/mt-mostvisited.zip

Webpage: http://www.borlik.net for this plugin:

Email: jborlik.DONTSPAM.ATSYMBOL.earthlink.IGNORE.net

Support is also available at the the Movable Type forums: http://www.movabletype.org/support/index.php?act=ST&f=20&t=20333&s=63aa7fee167f1be5388a03bfc8c7be0c
And at the mt-plugins site: http://mt-plugins.org/archives/entry/mostvisited.php

May 15, 2003

Elizabeth at the Pool

Elizabeth recently had a magazine article accepted, and the editors wanted a picture of her, at the pool, to go along with it. On the weekends, she swims at Santa Monica College, which has an excellent pool (recently built). So, on Sunday (May 4), I took my camera and we had a little bathing-suit photo session. (I swam a couple of laps, too, but my skills are nowhere close to hers. I can splash around a bit, and avoid drowning, but I cannot slide through the water like a sleek sea-creature.)

Continue to view several pictures.

Sitting on the platform, before getting wet.
Slightly overexposed, or rather (as it was a digital camera), slightly oversaturated. But the subject matter shines through.
A view of the beautiful Santa Monica College pool.
An action photo.
At the edge, after several laps. Look at those strong arms.

May 14, 2003

Total Lunar Eclipse

Look for a total lunar eclipse tomorrow night (Thursday). The good part (when the moon enters the umbra) should begin at 8:14pm (Pacific time) and end at 9:06 pm.

More information can be found at the Sky and Telescope site. The above image was taken from the University of Tennessee astronomy page.

May 11, 2003

Bag Of Air

Southwest flew me home from Seattle, last Friday. (Alaska Airlines took me back again, today.)

The early stages of the flight included some fun events involving cabin pressure. Soon after takeoff, my ears had trouble adjusting to the change in cabin pressure. I thought briefly that the environmental control system (or the cabin outflow valve) was having problems. (How embarrassing. “Pardon me, but is there an aerospace engineer on the flight?”) My ears popped, though, and all was fine. (I’ll attribute it to my recent illness.)

The flight attendant, after taking our drink orders, brought around bags of Air Crisps (Nabisco-made crispy baked snacks, or “chips” as Americans call them). The chips must have recently been brought on board, because the bags were quite inflated. They were almost hard enough to use as balls in some sort of weird food packing-based sporting event. Or maybe as floating devices for small children. Because Seattle is at about sea level, and the cabin was probably at about 10,000 feet, there should be almost 5 psi pushing up on the sides of the bags.

This leads to the observation that one’s gastrointestinal system (a bag of a different type) would be doing the same thing, if it were sealed up tight. I have to wonder how much farting goes on as the cabin changes altitudes, and if the release of non-breathable gases is something that ECS engineers should take into account.

May 07, 2003

Notes on Spiderman

spiderman.jpgThe movie “Spiderman” was released in the fall of 2002 (last year), and was very well received by the populace. It has recently been released to HBO, and I had the pleasure of viewing it again on my current stay in Seattle. For a large action film, it was nicely done: The acting was competent, the story was acceptable, the special effects were awesome, and the overall feel of the movie was vibrant. I liked it… with a significant exception, that jumped out at me when I first saw the movie in the theatres (last fall).

Warning: There are spoilers in the rest of the essay. If you haven’t seen it yet but plan doing so, stop now.

In the end, the hero (Peter Parker / Spiderman, as played by Tobey Maguire) defeats the villain. No problem, no big surprise. He wins the heart of the girl (Mary Jane Watson, as played by the red-haired Kirsten Dunst). No surprise there, either. In the last scene, she offers her love to Parker, even though she doesn’t know that he has superpowers. She loves him because of his good character, not because of any amazing abilities. It should be a done-deal, because he has pined after her for years. Mary Jane thinks, in the climax, as she dangles hundreds of feet above the ground, “I hope I make it through this, so I can see Peter Parker’s face again.”

But Parker rejects her. Why?

He thinks that if they were together, she would be endangered. Super-villains would be able to get to him because she would not be able to defend herself. He would always have to take risks, and thus could hurt her by the fact that he could be hurt. “No matter how hard I try, the ones I love will be the ones who pay.”

But he is wrong, clearly and demonstrably. Parker and the girl were not romantically involved during the climax of the movie, but she was used to bait Spiderman into a trap. (Spidey-memory must not be that amazing at all, as this obvious lesson was quickly forgotten.) The super-villain was able figure out what Parker loved, and used it against him. Another fact was that she made Spiderman stronger. With the thought of her, Spiderman was able to rally in his battle against the villain and succeed. She gave him inspiration and purpose, and it would be wrong to give up something that made him better. Also, it demeans Dunst’s character, as it implicitly assumes that she is unable to properly judge risk.

So my advice to Spiderman? Admit your love, and work on the relationship. Villains and problems will come either way, and so one might as well live as well as you can. “With great power, comes great responsibility.” Don’t blow it.

May 01, 2003

Updated Kernel

As I am sick-as-the-dog, and in a bizarre mental state brought on by dopings of Drixoral.. This, of course, seems to be an appropriate time to conduct one of the more sensitive operations on a computer: Updating the operating system. This is known as "updating the kernel", at least on Linux/UNIX boxen.

Anyway, I took the cheap/sleazy way out. I used RedHat's Up2Date script to autodownload precompiled kernel packages. If I was a real man, I would recompile it from source. But I am a sick, tired engineer who only wants time to work on thermodynamics problems and spend time with his girlfriend. Sue me.

One little glitch was in the updating the NVIDIA graphics drivers. I had to manually un-install the old version, and reinstall the new. This was simplified by NVidia's installation script, which did the grunt work of finding the correct versions to match my new kernel. Good for them.

So now:

pytheas:~$ uname -a
Linux pytheas 2.4.18-27.7.x #1 Fri Mar 14 05:51:23 EST 2003 i686 unknown