Final century of the year

In keeping with my recently acquired habit of putting things off to the last possible minute, today I completed my last century ride of the year.  As I mentioned previously, I set a goal at the beginning of the year to do at least one century ride per month.  Today’s ride, difficult as it was, completed that.  I haven’t been training much since October, so I struggled through the ride.

All told, I made 14 century rides over the year:  one each month, with two extra in March.  The longest ride was 136 miles (first day of my trip to Harlingen in March), and the shortest was 98 miles (the last day of the trip).

Just for the record, I won’t be making that commitment next year although I will be training for another ride to Harlingen.  This time I’ll have more company:  possibly a half dozen people making the full ride with me, and a dozen or more making the last day.  It should prove interesting.

Cleaning the garage

I’ve been putting off cleaning out the garage until Debra and I had two unencumbered days.  After three days off, mostly just relaxing and reading, we got up Sunday morning and headed to the garage to get to work.  It’s pretty surprising how much stuff two people can collect over the course of almost ten years.  We’d given the garage some minor “straightening up” a time or two early on, but for the last five years we just piled more stuff in there until we could hardly get to anything.

We have a three car garage:  two bays hold cars, and the third is designed to hold lawn mowers, yard equipment, and “other stuff.”  The third bay is at the back, perpendicular to the other two bays.  We tackled that one first.  As we pulled stuff out, we tried to arrange it into three separate groups:  stuff to keep, stuff to throw out, and stuff to give away or recycle.  Once the bay was empty, we swept out the accumulated dirt, leaves, and grass, and mounted the old laundry room cabinet on the wall.  Then everything in the “keep” group went back into the garage.  When we were done, I couldn’t believe it.  A place for everything, and everything in its place.  I can actually walk to the back of the room now without having to negotiate an obstacle course.  It took us almost eight hours to clean out that one bay.

Today we pulled both cars out of the front half of the garage and tackled that.  There wasn’t quite as much stuff to go through, although I was surprised at how much we had.  All the old construction materials (doors, lumber, etc.) that I was saving “just in case” went to Habitat for Humanity.  Other stuff went to Goodwill.  The deep freeze that’s been sucking electricity for no good reason went to a friend.  After a good sweeping, the old bookshelves that we replaced in March and that had been taking space in the spare bedroom went along the walls, and everything went back in.  The only thing left to tackle is my workbench, but now I have shelf space where I can put things.

It’s hard to describe just how good it feels to walk into the garage and know that I can get what I want without a struggle.  Having that monumental job out of the way is a huge relief.  Now I can replace the two damaged doors, and I’ll be done with the garage for a while.

End of assignment. On vacation

Today was the last day of my contract at the Texas Legislative Council, where I’d been since March.  When I got there, they were finalizing the requirements and database design for moving a very large system from the IBM mainframe to clustered PCs.  They hired me to help get them started building the new system in .NET using a more formal development methodology than they’d used prefiously.  Nine months later and after a few minor schedule glitches, the project is on time and (I think) within budget.

They have a lot more work to do, though.  There are many more programs to port, some existing VB applications to retrofit, and only two years in which to do it.  The system is scheduled to be in place at the beginning of the 80th Legislative Session, in November 2006.

I’m on vacation now until January 10, and don’t know if I’ll have the time or inclination to be writing here.  If not, Merry Christmas and Happy New Year to all.

More on timestamp formats

Continuing yesterday’s entry about syndication format dates…

As it turns out, the Atom syndication format draft specification uses a W3C date time value, which includes a UTC offset specifier, and Atom implementations apparently store the offset along with the date.  RSS 2.0 uses the RFC822 format.  RSS 1.0 (also known as RDF) doesn’t define a date field as part of the core specification.  RSS 1.0 implementations that do implement a date field seem to be split on which of the two formats to use.  The information is there.  We just need to get implementors to use it.

I’ve recently downloaded two open source packages for working with syndication formats in C#:  RSS.NET and ATOM.NET.  Interestingly, both fail to parse the date and time stamps.  Why?  Because they rely on the .NET Framework’s DateTime.Parse method, which doesn’t understand those formats.  I’ve submitted a fix to the maintainer of RSS.NET, and will be submitting a fix to the ATOM.NET project as soon as I finish it.

I was surprised to encounter these bugs, especially in ATOM.NET. DateTime.Parse says that it handles RFC822 format dates, but it only supports a subset of that format.  I can understand how a “quick test” of the code against a few RSS feeds would let that bug slip by.  But ATOM.NET uses the W3C date time value, and DateTime.Parse doesn’t even come close to parsing that.  The author either didn’t test that part of the code, or decided to release the code with the bug undescribed.  Shoddy work, that.

RSS timestamps are ambiguous

I’ve slowly been working on the RSS article categorization program that I outlined back in August. In the process, I’ve come to the conclusion that a standard timestamp as expressed in most programming languages (which is just a date and time) isn’t enough information to store about an article because it doesn’t provide any context. First, some background.

When you publish an RSS article you can supply the publication date and time. The timestamp is expressed using the RFC822 date/time format, which takes this form:

Thu, 16 Dec 2004 15:50:03 -0600

The “-0600” is the time offset from Universal Coordinated Time (UTC)–what used to be called Greenwich Mean Time (GMT).   The offset is the difference between UTC and the local time, expressed in hours and minutes. Thus, -0600 means that the time here is six hours and zero minutes earlier than UTC. So UTC is 21:50, or 10 minutes to 10 in the evening. Every RSS program that I’ve seen strips the offset information after possibly converting the date/time. That leaves you with at least four possible interpretations of the timestamp that the RSS aggregator displays. The timestamp can represent:

  1. The local time where the article was published;
  2. The time at your location;
  3. The UTC time;
  4. The local time at the location where the article was read and processed (assuming a Web service is processing the articles).

To make matters worse, RSS aggregators often won’t tell you which of these interpretations is being used.

If we’re going to use simple timestamps that don’t contain timezone information, then all times should be reported as UTC. This will become increasingly important as more people use RSS and similar tools to communicate. If everybody would standardize on UTC and explicitly state that times are expressed in UTC, there would be no confusion as to when things were posted.

Even if we standardize on UTC, a simple timestamp doesn’t provide enough contextual information. Sometimes you want to know all three relevant times: what time it was for the author when he published the entry (assuming that it’s close to the time he wrote it), what time it was for you, and the UTC time. Did the author write his entry in the middle of the day? At the end of a late night hacking session? What were you doing when he wrote the article? The UTC time, of course, is the absolute time used to order the article.

RSS aggregators could supply all three of these times quite easily by storing the offset information (the “-0600” value in the example above) along with the date and time that they normally store. If the timestamp is stored in UTC, then adding the offset will return the local publish time, and converting the UTC time to your time zone (something you can do in any modern programming language) will return the time at your location. That technique also has the benefit of being able to convert to your localtion wherever you are at the moment, something that becomes increasingly important as RSS aggregators begin to appear on mobile devices.

To all publishers of RSS information: please include the offset with the timestamp when you publish your articles.

To all authors of RSS aggregators: please store times in UTC, store the offset, and give me the ability to see all three of the relevant times.

Fixing Windows XP file associations

I installed PowerArchiver on my Windows XP machine at work the other day because I wanted to read a .tar.gz file. The default installation of PowerArchiver takes over all of the compressed file associations on the computer, making PowerArchiver the program that opens all compressed file formats that it understands (which is quite a few). This all works great until you uninstall PowerArchiver. Then you lose your file associations.

I uninstalled PowerArchiver shortly after I used it for the .tar.gz file. Today I wanted to create a zip file, but the option to create a new compressed (zipped) folder didn’t appear on the Windows Explorer menu. Not good. Google to the rescue.

A search for “windows xp zip restore association” returned a link to Doug Knox’s Windows XP File Association Fixes. A quick download of the ZIP Folder Association Fix, and I was back in business.

If you’re looking for Windows tips, tweaks, and tricks, check out Doug’s Windows Tweaks and Tips. There is a lot of good stuff there. But be careful. You should have some idea of what you’re doing before you start applying some of those fixes.

Immigrants get fatter the longer they’re here

The Associated Press is reporting on a study that will appear in tomorrow’s Journal of the American Medical Association which shows that obesity is relatively rare in the foreign born until they have lived in the United States for more than 10 years.  The AP headline reads “If You Move to America, You May Get Fat.”

I haven’t seen the study, but it sounds like it’s reasonably good science.  Researchers studied data supplied by 32,374 participants in a 2000 national health survey.  14 percent of the participants were immigrants.  They found a clear link between obesity and numbers of years in the United States.

What I found distasteful about the article, beyond the sensationalist headline, was the tendency to characterize the problem as one of culture, rather than of personal responsibility.  The article quotes the study:

Trends in obesity among immigrants may reflect acculturation and adoption of the U.S. lifestyle, such as increased sedentary behavior and poor dietary patterns.  They may also be a response to the physical environment of the United States, with increased availability of calorically dense foods and higher reliance on labor-saving technologies.

Most of the article makes it sound like immigrants are forced to be obese, or at least not encouraged to be healthy.  Only the last paragraph of the article makes any real mention of the possibility that individuals can prevent themselves from getting fat.

I’d sure like to see one of these articles place the responsibility where it belongs.

Obesity backlash

There appears to be a minor backlash movement in response to all the noise about Fat America.  Whereas people appear to be getting the idea that they have to start paying attention to their weight, they’re not about to give up completely on their favorite foods.  Two items:

In November, Hardee’s rolled out their Monster Thickburger: two 1/3 slabs of Angus beef, four strips of bacon, three slices of cheese and mayonnaise on a buttered sesame seed bun.  1,420 calories and 107 grams of fat.  Activist organizations who would like to place the blame for our nation’s obesity problem on the fast food industry were quick to condemn Hardee’s.  The Center for Science in the Public Interest (which is neither scientific nor operating in the public interest, but that’s a subject for another day) dubbed it “food porn” and “the fast-food equivalent of a snuff film.”  But Hardee’s is apparently doing a brisk business.  There’s room for indulgences like this, even in a reasonably healthy diet. If I can find a Hardee’s nearby (the last one turned into a Hooter’s, where neither the food nor the waitresses are anything to write home about), I’ll give the Monster Thickburger a try.

I’ve had a weakness for Wienerschnitzel chili cheese dogs for over 20 years, although  I don’t eat them as often now as I used to.  I couldn’t even get them here until about three years ago when Wienerschnitzel finally opened a store in the Austin area.  I stopped by there on Saturday and got a good laugh when I saw their napkin:  “Join the chili dog diet!  A diet you just can’t lose on.”

I don’t know yet whether people are actually watching what they eat and are using fast food as a “treat,” or if they’re visiting fast food restaurants more frequently in protest.

Credit card low interest transfer offer

I have a love/hate relationship with my credit card company. I’ve mentioned before that they regularly (about once a year) increase my credit line, usually between ten and twenty percent. I’m still not sure why they do that, as I don’t carry a balance on the card. It’s nice to know that I could live on credit for a few months if I had to, but I’m not likely to take advantage of it.

Until recently. I just received an intriguing offer in the mail. The company sent me four checks: three to pay off “high rate balances,” and one that I can use any way that I choose. I can write checks up to my available credit balance. The attractive part of the offer is the interest rate: 1.99%. I checked the fine print, and that really is the fixed rate. No “six month introductory rate” or anything like that. Two percent money. Provided, of course, that I don’t default under any of the terms of my card agreement.

It’s too bad I can’t come up with a good reason to borrow the money. If my credit line was a little higher, I’d be tempted to pay off my house with it. If I was planning a large purchase, I’d absolutely take advantage of this offer. I’d be money ahead if I stashed the equivalent cash away in a bank certificate of deposit and paid for the purchase with one of these credit card checks.

There’s always a catch, of course. The credit card company isn’t really doing me a favor by lending me money at this low rate. The fine print reveals where they’re getting paid: lower rate balances are paid off before higher rate balances. The low rate applies only to the purchases or balance transfers you make with the supplied checks. Any normal purchases or existing card balances continue to accrue interest at your standard card rate. So if you use the card at any time while you’re still paying off the transfer balances, those new purchases stay on the card at the higher rate until the low rate balance is paid off.

Offers like this are calculated to take advantage of the unwary credit card user. I find it terribly irresponsible of the credit card companies to make offers like this to people who don’t understand the ramifications of accepting the offer, and who are not in a position to borrow responsibly. Those of us who can take advantage of the offer usually won’t because we have a healthy aversion to debt, even when can borrow at a rate that’s less than a guaranteed rate of return.

I won’t say that I’m not tempted. I think it’s human nature always to want more, and given this opportunity I found myself looking for a reason to take advantage of the offer. If there’s a better example of money burning a hole in my pocket, I don’t know what it is. I’m fortunate (or unfortunate, depending on your point of view) enough, though, to have learned that lesson the hard way. The cash will stay in my bank account and my credit card balance will remain at 0.

My new radio

I don’t have a decent picture of it yet, but Thursday Debra bought me an early Christmas present:  a Kenwood TS-450S transceiver.  It’s a high frequency (HF) radio that covers all of the amateur bands from 160 meters to 10 meters, and supports AM, FM, SSB, CW, and FSK operation.  The unit has an automatic antenna tuner that appears to work quite well with my horizontal loop.  The only drawback being that the tuner doesn’t work on the 160 meter band.  I hadn’t planned on working that band for a while anyway, so it’s no great loss to me.

Over the weekend I installed the permanent feed line from my operating position out to the loop around the garage, and I’ve been playing with it as I have time.  On Friday and Saturday I managed to contact 22 out of 108 National Weather Service stations that were participating in SKYWARN Recognition Day.  Not bad for a modest station, an inexperienced operator, and only a few hours’ effort. This evening I made my first contact with a station in South America: a Brazilian station that was booming in on the 20 meter band.

This coming weekend is the ARRL 10-meter contest, where stations try to contact as many others as possible.  I won’t be able to work the entire contest, but I’ll spend some time trying to fill out my Worked All States card.  Who knows?  I might even reach out and touch a long lost friend.