Tablet UML News


News and commentary (and whatever else catches my eye)
from Martin L. Shoemaker, author of Tablet UML
and UML and Tablet PC instructor for The Richard Hale Shaw Group

Saturday, November 26, 2005

Adventures in C# 2.0, Part I: That's easy for you to say!
As I convert Tablet UML to C# 2.0 .NET 2.0, I'm learning some things the hard way. So I'm writing those lessons learned here, in hopes that my hard-learned lessons may make your learning process a little easier.

And today's hard-learned lesson is: that's easy for you to say, but may be hard for me to do. In particular, I'm referring to generics, and some seemingly good advice: when moving to 2.0, replace all of your typeless collections with generic collections, so that you can prevent bugs in the future, and maybe even catch bugs that you have right now and don't even know it. Well, that advice is good, in general; but sometimes, it's not practical in existing code, for reasons of backward compatibility. But to understand why generics can be a problem, I'm going to have to lay some groundwork by explaining some terms.

First, let's talk about typeless collections, which were the only general-purpose collections available in .NET 1.0. The idea of a collection class is to provide the logic for maintaining a collection of related things. Common collections include: arrays (one or more dimensions of fixed size that define a set of related things); lists (one-dimensional collections, similar to one-dimensional arrays but resizable); hashes (a collection of things that can be looked up by some key value); and collections built on arrays, lists, and hashes. For instance, a stack is a list where the last thing added is the first thing removed; while a queue is a collection where the last thing added is the last thing removed.

Now it would be a lot of wasted effort to write the logic for a list of dates, and then rewrite that logic for a list of dollar amounts, and then rewrite it yet again for a list of dog breeds. List logic (or array logic, or hash logic) should be independent of what is contained in the list.

There are two common solutions for separating collection logic from content logic. One is to make the collection typeless. In .NET, for example, all types ultimately derive from the System.Object type; so the logic in System.ArrayList (the standard list class) is written to work on System.Objects. That way, if you need a list of dates, you create an ArrayList, and you put dates in it. If you need a list of dollar amounts, you create an ArrayList, and you put dollar amounts in it.

Now the problem with this approach is it requires programmers to be perfect, and further requires that their communications with other programmers be perfect. Here's a smart business tip for you: never rely on programmers to be perfect. We're human. We make mistakes. It's very often smart to build our tools in such a way that they catch our mistakes, usually as soon as possible. (Why as soon as possible? Because if you make a mistake today and find it today, you'll remember what you were doing, and the mistake will be easier to fix. If you have to wait a month to find the mistake, you'll forget what you were doing. Besides, if the mistake is caught soon enough, there's no way to ship it to the customer.) The most common mistake you can make with a typeless collection is to assume it contains one type, and then accidentally put the wrong type in it. Suppose you write a calendar program, and it maintains a list of dates. Now suppose I write an add-in for your program to automatically add the dates of dog shows into the calendar. And then suppose that, when your calendar calls my add-in and asks for dates, I accidentally give it a list of dog breeds. Now when your program tries to put those "dates" into the calendar, it will pull out Cocker Spaniel and say, "I don't know what date this is." Very possibly, your program will crash, and in a way that won't make it obvious that it was my bug, not yours. Or you could add code that checks everything I give you, as a form of defensive coding; but defensive coding adds overhead, and can itself have bugs.

Wouldn't it be a lot easier if, when your calendar asked for my add-in for its list, it could say, "And this list can only contain dates?" Well, that's one of many reasons that templates were added to the C++ language back in the 90s (a.k.a. The Ancient Years). Templates are a way of defining the behavior of a class while leaving some of the details unspecified; and then each time you use a template, those missing details are filled in. The classic example is the template List<T>, where T stands for an unspecified type. List<T> defines all of the list management rules, but doesn't care what T is; and then List<Date> uses those rules to make a list of dates, while List<DogBreed> is a list of dog breeds. If your calendar asks for a List<Date>, I can't give it back a List<DogBreed>: the code won't compile, so I can't ship it. Or if your add-in provided me with a List<Date> and asked me to fill it, I couldn't put CockerSpaniel in that list. Again, the code wouldn't even compile.

Now everyone acknowledges that templates are a better solution than typeless collections (in almost all cases); but when .NET 1.0 was developed, the team recognized that there were complications with templates that were larger than they were willing to deal with at the time. I won't try to defend this decision, but I will point out: they were trying to build a new, managed run-time, like Java (which also did not have templates until very recently); they were trying to make it support a wide range of languages (whereas C++ templates are only a C++ concern); and they were trying to build those languages and tools and a framework for developing all sorts of applications. They couldn't do everything in 1.0; and so somebody decided templates were out.

Now in .NET 2.0, we have generics, which are very much like templates (enough so that I can't really keep the difference straight). And that leads us to the advice that we should pretty much always prefer generics over typeless collections, and we should convert our old typeless collections to generics as soon as possible. Well, I stand by the first half of that advice for new development; but for legacy code, I found that it wasn't so easy. And ultimately, that seemingly simple advice proved to be more work than I could handle for version 1.5 of Tablet UML (coming soon!).

The first problem is that I had some methods that operated on those typeless collections. For instance:

private void SelectMembers(
ArrayList members, ArrayList newSelection,
ArrayList selected, ArrayList unselected)


The purpose of this method is to fill two lists, selected and unselected, based on two other lists. members contains the complete set of items, selected or unselected. newSelection contains the list of things which must end up in selected; and anything which doesn't end up in selected must end up in unselected. Note that this method doesn't care what's in each list at all, and relies on programmer discipline to ensure that all lists contain compatible types.

Now I could imagine converting this to a generic method, something like this:

private void SelectMembers(
List<T> members, List<T> newSelection,
List<T> selected, List<T> unselected)


But the problem with this is that generics have to be defined at the class level, not the method level. So that meant the class itself had to be a generic class. And since the class in question was a form, that meant I had to create a generic form.

Now all of that was possible, and in the end I got it all done; but it made the conversion jump from a simple search-and-replace to a "Now find every instance and every call, and make sure it has a generic parameter." That was a much bigger job than I signed on for.

And in the end, I tore it all out.

It actually worked pretty well, and I thought it was a nice design improvement; but when I went to save my model, the .NET serialization engine threw an exception, roughly paraphrased: "The Soap serializer does not support generics." As Richard Hale Shaw pointed out, "Soap can't support Generic anything per se, 'cause it has to remain platform-independent — Generics aren't!!" And later he added, "Why not use the BinarySerializer? It'll be smaller/faster as well."

To which my response is: that's easy for you to say! (You knew I'd get around to that eventually.) See, while my customer base for Tablet UML is small right now, I still have to think about backward compatibility for their files. And I started Tablet UML using Soap format (i.e., XML) for storing model files. That's not a mistake I'll make again (unless human readability or platform independence is a necessary feature); but it's the mistake I made, and it's the mistake I'm stuck with.

For now. At some point, I'll work on a conversion utility to go from large XML files with ArrayList to smaller binary files with List. But that's a nontrivial effort. Simply saying, "Change all your collections to generics," can imply an awful lot of work that may not be obvious on the face of things.

Hey, if programming were easy, everyone would be doing it.

Saturday, November 19, 2005

In Kansas?!?!?!?
So in order to keep my flight costs down (long story), I was stranded in Wichita through Sunday after my talk at Wichita Developers .NET. So I turned to 360Wichita for things to do; and what I found was the Cosmosphere in Hutchinson, Kansas: one of the finest space museums I've ever seen.

In Kansas?!?!?!?

Well, at least they have a sense of humor about it. Rather than be offended by that question, they actually printed up a small handout called "Why Hutch?" In it, they explain how Patricia Brooks Carey (a local heiress) had a passion for astronomy and organized local volunteers to build a planetarium in the Poultry Building on the Kansas State Fairgrounds. Later, they added some exhibits; and then fortunate timing led to a liaison with the Smithsonian, and thus to a full-fledged museum showcasing some major artifacts from the Apollo era and more. And then later still, they acquired a large number of artifacts from the Soviet programs as well. Almost half a world away from the Baikonur Cosmodrome, the Cosmosphere has one of the largest collections of Soviet space hardware anywhere. As the handout wraps up:

"It all goes to show, with vision, timing and a chicken coop, anything is possible. You can even build a space museum in Kansas."

Since I didn't know I would be sightseeing on this trip, I didn't bring the camera. The best I could do is the camera in my iPaq; and I'm still learning how to use that without a lot of blurring. So the shots I got weren't as good as I would've liked. What you see below are the best ones.

As you approach the building (it's not in the Poultry Building any more), it doesn't look much different from any typical college building:

Cosmosphere Entrance

Except, of course, for the small detail of a Redstone rocket out front:

Mercury Redstone

And then as you approach the entrance, you see a bronze statue of Gene Cernan, last man on the Moon (to date):

Gene Cernan

And then you know that there's something special here. Once inside, even before you get to the main exhibit area, you see two space probes:

Surveyor

This is a replica of the Surveyor, a probe sent to the Moon to study surface conditions in advance of the Lunar landings. On the Apollo 12 mission, Commander Pete Conrad and LM Pilot Alan Bean landed within a short walk of the real Surveyor. They took samples from it to help study how the metal had been affected by years on the Lunar surface. (I wish I had a better picture, but this was the best I got. Gotta learn to hold the iPaq still long enough for it to autofocus. No quick snaps with the iPaq!)

Viking

This is a replica of the Viking, a probe sent to Mars. No one has visited it for samples. Yet.

They also had two rocket engines:

H-1

These are the H-1 (top) and the RL-10 (bottom). Both were used on various pre-Apollo rockets, though I can't recall which ones.

RL-10

But that was all in the lobby area. From there, I descended the stairs to the main exhibit area. The two most interesting things about the Cosmosphere are that the exhibits are mostly underground, so space is limited; and yet they use that limited space very effectively, organizing the exhibits by themes and eras over time. Most historical museums do this to some extent; but I thought the Cosmosphere did an excellent job of this. Their use of color and space gave a definite feeling of transition as I walked from one era to another. Places like the U.S. Space and Rocket Center may have more artifacts (after all, it's hard to top a Saturn V); but the Cosmosphere presents a better historical experience. Unfortunately, that experience would be hard to capture even with the best camera. It's not something you can easily capture in a snapshot. You have to actually walk through it to get the effect.

One way in which their historical perspective is more extensive is in their coverage of the German rocket program. The Space and Rocket Center doesn't ignore this history, by any means; but perhaps because of local sensibilities (von Braun and his German team settled in the Huntsville area, and many of their families can still be found there today), it's treated relatively briefly. The Cosmosphere has a lot of detail on the V-2 program, including this exhibit:

V-2 Nose-on

V-2 and Slave Labor

The plaque tells how over 10,000 slave laborers died on the V-2 program — more than double the number of people killed by the rocket attacks. The Cosmosphere exhibit makes very clear how evil the Nazi regime was. It makes you think how important it is that we never let that happen again.

Here's another view of a V-2:

V-2

Next, they showed artifacts and information from the earliest days of the space race, days that were dominated by Soviet launches:

Sputnik

This somewhat fuzzy image is a replica of Sputnik, the first artificial satellite in orbit. The exhibit tells of von Braun's frustration at the Soviets' success, because he felt the American program was ready to launch sooner. He felt that all we lacked was vision and nerve; but he wasn't calling all of the shots.

Laika

This is a cutaway model of the Soviet capsule that launched Laika, first dog in space — before we had yet launched a single satellite. Actually, Laika was the first living creature of any kind in space, and was launched to help the Soviets measure the effects of launch and weightlessness on a living creature. (Sadly, they had no recovery mechanism at that time, so Laika's life was sacrificed in the experiment.)

So while the Soviets were launching a satellite and then a capsule with a live animal, the best we could do was this:

Vanguard

That's a replica of the Vanguard, a grapefruit sized satellite with short little communication antennae. By contrast, the Sputnik was well larger than a basketball, and its antennae were more than eight feet long. Yet even with such a small ambition, we failed: the Vanguard's launch vehicle blew up just after liftoff, and the satellite was lost.

But weren't completely without successes in that era. While we weren't making much headway in the launch area, we were making great strides in propulsion, as these exhibits showed:

X-1 Rocket Plane

This is one of the Bell X-1 Rocket Planes, such as Chuck Yeager flew when he broke the sound barrier for the first time. (Another test pilot from the X-1 program would go on to some acclaim, a young man named Neil Armstrong.)

Rocket Sled

This is a rocket sled, used for ground-based testing of rocket engines and also for tests of how humans could stand up to high acceleration.

Yet despite these successes, the big game in the Cold War was in space; and we were losing there. One reason was the RD-107 or "Red Thunder" rocket engines:

Red Thunder

These were the workhorses of the early Soviet launches; and at the time, we had nothing to match them. These were used for many purposes, including launching the first manned probe, the Voskod:

Voskod

The Cosmosphere personified the space race with statues of two men:

Nikita Krushchev

This is Nikita Krushchev, the Soviet Premier who boasted, "We will bury you. Our rockets could hit a fly over the United States."

John F. Kennedy

And this is President John F. Kennedy, the man who decided, "That's not gonna happen." Or to quote him exactly:


We choose to go to the moon. We choose to go to the moon in this decade and do the other things, not because they are easy, but because they are hard, because that goal will serve to organize and measure the best of our energies and skills, because that challenge is one that we are willing to accept, one we are unwilling to postpone, and one which we intend to win, and the others, too. It is for these reasons that I regard the decision last year to shift our efforts in space from low to high gear as among the most important decisions that will be made during my incumbency in the Office of the Presidency.


And through his inspiration, we accepted the challenge, we didn't postpone it, and we won. And step one of that success was Project Mercury:

Atlas Engine and Sphere

This is an engne and a fuel sphere from the Mercury Atlas, the vessel that replaced the Redstone (above) for Project Mercury. The Redstone was used for sub-orbital flights; but when it came time to launch John Glenn to become the first American in orbit, it was the Atlas that did the job. (I have a photo of a Mercury capsule replica from the Cosmosphere, but it's too blurry to show here.)

Project Mercury got Americans to orbit; but it was on Project Gemini that we launched teams of two, with a plan to practice and master vital skills for the Lunar missions: rendezvous, docking, orbital navigation, and space walks. And for its Project Gemini exhibits, the Cosmosphere pulls out all the stops. Welcome to Launch Complex 19:

Launch Complex 19

This is an actual Titan launch facility, transplanted to the Cosmosphere. When you walk into it (or actually out to it, since it's outside, you're transported back in time and space to an actual Gemini Titan launch. Hidden speakers play back the actual recorded sounds from the launch prep, so you're immediately met with the rumble of engines and systems coming on line. And then you look up:

Gemini Straight Up

Gemini Titan

Gemini Top

Gemini Middle

Gemini Base

And here's a close-up of the engines:

Gemini Titan Engines

And then, if you're patient, and sit through all the holds and the final countdown, the launch itself rumbles over you. It's all realistic enough that you can imagine the flames erupting around you. That's not a good image for the faint of heart!

Back inside, I got a rather blurry photo of a Gemini capsule:

Gemini

And after Gemini, of course, came Apollo. But I'll save those photos for a later post. I'm off to visit my aunt and uncle!
And the winner is...
Tablet UML Full Page Ad

Thanks to everyone for the suggestions and feedback. And thanks in particular to Zombiboy, who convinced me that my original instinct was the right way to go, and everything after that was just complicating matters.

Tuesday, November 15, 2005

Two more photos from Huntsville...
...just for my brother Joe, the tire man:

Space Shuttle tire

Somehow I expected the Shuttle to have larger tires.

Tire Patch

That patch doesn't make me feel all that safe. (The tire looks like a Goodrich. I wonder if it's in Joe's catalog...)
A Tale of Two Vessels
This is the tale of two vessels I visited on my recent trips to Boston and Huntsville.

This is the U.S.S. Constitution, a.k.a. "Old Ironsides", the world's oldest commissioned warship still in service and still afloat:

U.S.S. Constitution, a.k.a.

(The H.M.S. Victory is a fine ship with a glorious history, and is both older and still commissioned; but as the U.S. Navy is fond of pointing out, the Victory is "afloat" in concrete.)

This is not really a vessel at all:

Saturn V Monument

Rather, it's a full-sized replica of the Saturn V, commissioned by the Alabama Space Science Exhibit Commission and unveiled on July 17, 1999. (Bonus points if you can tell me why that particular date.) It almost has to be a replica, because all of the vessels in this line were one-shots, and the pieces have mostly either burned up on reentry or sunk beneath the waves. Still, an actual Saturn V (one which never flew) is shown here:

Saturn V on its side

Both can be seen at the U.S. Space and Rocket Center. (Actually, that photo of the real Saturn V is from my trip last year. So sue me. This year, the Saturn V is under restoration, and you can't get close enough for that angle.)

The motive power for the U.S.S. Constitution is hinted at here:

Rigging

That's a shot of some of the rigging of the ship. When under way, some number of sails would be hung from those lines: more sails to catch more wind for more speed; fewer sails when scouting and otherwise traveling at a more leisurely pace, or when too-strong winds might make the sails a risk. Under full sail with the right winds, she could make 13 knots, or nearly 15 mph.

The motive power for the Saturn V was a little bit more complex. It starts with the F-1 engines:

F-1 Engine

That's just one of them. The Saturn V had five of those monsters in its first stage. If you stand next to it, you feel tiny; but that's hard to tell from a photo. So to give you a sense of scale, the folks at the Space and Rocket Center have helpfully placed picnic tables under the monument:

Picnic Tables under the Saturn V monument

Those five F-1s got the Saturn V off the ground, and burned for 150 seconds. That got the vessel up to around 5,300 mph, and a height of nearly 38 miles. Then the first stage would drop off, and five J-2 engines would kick in:

J-2 Engine

A J-2 is pretty big when you first see it; but by comparison to the F-1, it's pretty tiny.

Those five J-2s would burn for 360 seconds, and then the second stage would drop off. That got the vessel up to around 15,300 mph, and a height of nearly 115 miles.

The third stage had a single J-2 engine, which would burn twice, for a total of 500 seconds. By the end of the second burn (also known as TLI, or Trans Lunar Injection), the remainder of the vessel would be traveling over 22,300 mph — fast enough to escape Earth's gravitational pull. After the Command and Service Module (CSM) docked with the Lunar Module (LM, but sometimes pronounced "lem"), the third stage would drop off. That left the CSM and LM free to go to the Moon. I didn't get any shots of a full CSM (or even a simulator); but here's the actual Apollo 16 Command Module, without the Service Module (of course):

Apollo 16 Command Module

The CSM had it's own engine, the Service Propulsion System, or SPS (not pictured here); but the main motive power for the SPS was gravity. As the CSM's velocity carried it away from Earth, the Moon's gravity grew stronger and eventually dominant; and so a primary use of the SPS was actually as a brake, slowing the SPS and the LM down enough to attain a stable Lunar orbit. Later, the SPS was used for Trans Earth Injection, breaking free from the Moon's much weaker gravity and sending the CSM back toward Earth.

When the LM cut loose from the CSM and descended to the Moon, it did so on this Descent Stage Engine:

Descent Stage Engine

This one was actually pretty small, maybe half my height. Of course, it was supporting a tiny fraction of the Saturn V's mass against one-sixth the gravity, so it didn't need to be nearly as large as an F-1.

Before the Apollo crews reached the Moon, some scientists speculated that the Lunar surface might be deep in dust and might trap a vessel that landed there. In hindsight, it seems like we had plenty of probe evidence and other observations to counter this theory, but it was a valid safety concern. And no one knew quite how rough the terrain might be at a landing site. There was some fear that leaving the Moon might be a lot harder than landing, because there might be no stable ground from which to launch. So in what I've always found to be the most clever engineering solution of the whole LM program, the engineers decided to have the crew bring their own launch platform with them. The LM was designed in two stages: a descent stage which would land and plant its feet on the surface; and then an ascent stage which would use the descent stage itself as a stable launch platform. Even if the descent stage landed in deep dust or was somehow damaged during landing, it would still support a launch of the ascent stage in all but the most catastrophic scenarios. I don't have details on the ascent stage engine, but it was the last major element of motive power for the Apollo missions.

I haven't found any reference for the top speed of the CSM; but it was at least 1,500 times faster than the U.S.S. Constitution. The longest voyage possible for the U.S.S. Constitution was a circumnavigation of the Earth, or something more than 25,000 miles. An Apollo crew on a Lunar mission traveled much more than ten times that far:

Return trip: TLI to Splashdown

This is a small glimpse of the crew quarters of the U.S.S. Constitution:

Hammocks

Officers had it slightly better, but not much. The captain fared better still, because Rank Hath Its Privileges. 450 officers, enlisted men, Marines, and ship's boys slept in shifts in these cramped quarters. (The ship's boys were given education in academic matters and shipboard duties and a decent stipend for the day, in exchange for some vital combat duties: they were the only ones small enough to crawl into the cramped powder lockers and cannon ball stores and haul out the powder and ammunition. Some very brave soldiers won some very risky battles on the U.S.S. Constitution; and every time they fired a cannon at an enemy ship, they were able to do so because some ship's boy was on the job supporting the cannon crew.)

This is a glimpse of the "crew quarters" in the Apollo CSM:

Command Module Interior

It looks like cramped was still the rule of the day; and unlike the U.S.S. Constitution, Rank Had No Privileges when it came to living space in a CSM. (Actually, I believe this photo is from a Command Module simulator, not from the real Apollo 16 Command Module. The real thing is behind plexiglas, and all my photos of it have flash reflections right in the most inconvenient places.)

While I don't have any pictures of them, the U.S.S. Constitution had ship's boats for going ashore when port facilities weren't available.

The CSM had a ship's boat of sorts as well, i.e., the LM itself:

Lunar Module

This was a two-man landing craft, and one of the most challenging flying experiences any aviator could face. The story of the design and construction of this craft is an inspiration to engineers everywhere, and is my favorite episode of From the Earth to the Moon. I'll never be an astronaut, and I can't really see myself as one. A space tourist or mission specialist is as close as I can imagine (and I'm not holding my breath). But I could see myself and my colleagues in every scene of this story of engineers facing near insurmountable challenges on nearly impossible deadlines. When the lead engineer says goodbye to his baby and knows it's never coming back, I choked up. (And keep an eye on the rubber balls for one of the nicest little bits of visual shorthand I've ever seen in a film.)

And on later missions, the "landing craft" itself carried a "landing craft" of sorts, the Lunar Rover:

Lunar Rover

These battery-powered vehicles could fold up and fit inside the cargo area of the LM. With a top speed of 8 mph, the rovers greatly extended the territory that astronauts could explore.

Here Seaman Rob Shaughnessy of Bellows Falls, Vermont tells us about grog:

Seaman Shaughnessy and the grog cask

(Seaman Shaughnessy was a most excellent tour guide, and I enjoyed his presentation immensely. He should have a fine career in public speaking if he ever decides to do so; but since he was both a fireman and an EMT before joining the U.S. Navy, I suspect he prefers a career with a little more action.) In the days of the tall ships, sailors were issued a small daily ration of rum (or other alcohol, but rum was most common). This helped boost morale and helped the men to sleep, as well as providing them with at least something safe to drink. (More on that in a moment.) But the ration was small, not enough to make a healthy, active man drunk; and so sailors got inventive, and hoarded their rations to the weekend. A week's ration was enough to get a man good and drunk; and while that may have pleased the men, it highly displeased the captain. A crew of drunk (or hung over) sailors makes a lousy fighting force (Duelist jokes notwithstanding). So our Navy borrowed a trick from the Royal Navy: the recipe for grog. This was a mixture of rum, lime juice (which also provided vitamin C, and thus helped stave off scurvy), and water. It was acceptable to drink on the day it was served; but if you hoarded it for a week, it went bad, and would make you quite ill. And so the ship's surgeon (who was also the dentist and the cook) was on orders to report any man who showed up with signs of grog-sickness, particularly on the weekends, so that the man could get extra duty assignments.

And why did the grog go bad? Well, I'm sure that the lime juice started to go a bit bad over a week; but for the real answer, Seaman Shaughnessy pointed us to the scuttlebutt:

Scuttlebutt

This was the water cask; and it contained what the crew called "lively water". This was long before water purification, remember; so when the ship put in at some river mouth to refill its stores of water, the "fresh" water most assuredly had microorganisms and more living in it. And every day, the cook would go down to the stores and fill the scuttlebutt and haul it up to the gun deck. The sediments would have largely settled before the scuttlebutt was filled; but microorganisms and algae and even small fish and polliwogs and whatnot would still get into it. And by the time those organisms had had a week to grow in a nice nutrient-rich bottle of grog, well, they'd be just ripe for making a man ill.

Another thing to know about the scuttlebutt is that it was the only place on deck where the enlisted men were allowed to talk. The main deck was the domain of the captain and his officers: no one spoke except on official duties, so that the captain's orders could be more clearly heard and conveyed. And the berthing deck was always occupied by sleeping men (they had to sleep in shifts, remember) who would not appreciate a lot of idle conversation. So the scuttlebutt was the place the men gathered to talk and to gossip; and thus the term scuttlebutt entered our slang as a term for gossip. To this day, drinking fountains in the Navy are still referred to as scuttlebutts.

The final bit of dining lore that Seaman Shaughnessy shared regarded the harness cask:

Harness Cask

The meat in the stores was kept heavily salted to preserve it; so to render it edible, each day the cook climbed down into the stores, carved off enough for the day, and put it in "fresh" water in the harness cask so that much of the salt could be soaked out of it. The resulting meat, though, was still very salty, and very tough. The sailors liked to claim it was horse meat, and to try to convince new crewmen that if they kicked over the harness cask, a horsehead would spill out, still wearing its harness.

The Space and Rocket Center did have exhibits of Apollo food, but I forgot to get a photo. Still, griping about the food is something of a military tradition, so I'm sure the Apollo astronauts did plenty of that. And the story of John Young's orange juice farts is legendary.

Make no mistake about the U.S.S. Constitution: she was a warship, pure and simple. Here's a view of some of her cannons:

Cannons

There were 54 in all: 32 24 pounders, 20 32 pounders, and 2 24 pounder bow chasers. When the 32 pounders fire, they fly backward with the equivalent kinetic energy of an SUV going 30 mph. Then they're caught by the massive ropes, and they bounce around so much that the maker's crests forged into the tops of the barrels are actually imprinted into the beams above the guns. The larger guns were actually given to the U.S.A. by the British, in order to aid the Constitution's original mission: fighting piracy on the high seas. But they were given with a condition: that these guns never be used against British vessels or interests. And so, when the War of 1812 broke out, the Constitution honored that agreement, and fought only with her smaller guns. Despite that, she never lost an engagement, and won over 30 battles, including an amazing victory against superior odds in her battle with the Cyane and the Levant. And though it's habit to speak of these as the ship's battles, of course most credit must go to the fine crew, including the 312 men who died defending freedom aboard her decks. Still, the ship herself deserves some credit, along with her designer, Joshua Humphreys. The ship design was very advanced for her time, with great structural strength. And the hull was an amazing innovation for its day: in a time where double walls were common (with one wall running vertical and the other horizontal, so they could buttress each other, Mr. Humphreys designed a triple hull, with both inner and outer walls running horizontal, while the middle wall ran vertical. This by itself added more structural support; but beyond that, the middle layer was made of Southern live oak, a tree at the time found only in Georgia, USA, and so dense that it actually won't float by itself. This combination of reinforced design, triple-walled hull, and live oak was such that during her battle with H.M.S. Guerriere, British cannon shots actually bounced off the sides. One observer shouted, "Huzzah! Her sides are made of iron!", thus giving her her nickname.

While no actual declared war was involved with the Saturn V, the race to the Moon was actually one front in the Cold War with the now-defunct Soviet Union. Still, she bore no weapons, and carried the message, "We came in peace, for all mankind." Despite that global message, though, both vessels proudly declared what country gave them birth:

Flag flies above the U.S.S. Constitution

Flag flies at a recreation of Tranquility Base

It makes me humble to think that these two vessels, so different in almost every respect and yet so similar in spirit, are part of our heritage. And a chance to see both in three days was not something I'll soon forget.

Monday, November 14, 2005

Where've you been, Martin?
All over the place! And it has kept me hopping. Plus I've been in a string of low-speed-connection zones that made posting more difficult, interspersed with a string of low-speed-and-intermittent-connection zones.

But now I'm on the T-Mobile HotSpot for what Microsoft tells me will be a minimum of a 4.5 hour download. That's assuming no one else comes into Kinko's and starts using the connection. Right now, the Kinko's staff tells me I have a whole T1 line to myself; and it's still a 4.5 hour download.

So I may do a few catch-up posts here (while recognizing that each post delays my download a few seconds).

Wednesday, November 2, 2005

Gateway CX200X: More impressions
The screen rotates the opposite direction from the Toshiba's. There's no right answer on that decision. but it will take getting used to.

Wow! I can actually hear the stereo from the built-in speakers!

For reasons I can't begin to guess, my T-Mobile/Sony Ericsson GPRS card holds the GPRS connection better on the CX200X than it did on the M200. And the M200 held the connection better than the 3500s did. Something is improving in this technology over time, whether it's power or heat or whatever.

After the somewhat... "intermittent"... fans on the M200 and the 3500s, it's rather strange to have a machine where you can hear and feel the fan full time.

Man, that screen is wide! I have room for a lot more buttons on toolbars and such. I can view much wider lists, such as my playlist in Media Player, without scrolling.

That touch pad scroll zone is valuable when you're working in a full screen window. My scroll bar can be half a screen away or more, way out of the area where I'm working; but the scroll zone is always right at hand.

Gotta love those 12 cell batteries. Five hours of life, easy. Three pounds of weight. If terrorists ever take over my plane, I'm pulling out my battery and my spare battery and using them as bo sticks. These suckers will crack some skulls!
The Power-Mad Tablet PC Chart - November 2005
Even though my CX200X hs arrived, I've decided to try to keep up The Power-Mad Tablet PC Chart, a chart of high-end Tablet PCs, suitable for development work. It's not for the casual Tablet PC user, nor for someone who just wants a lightweight, mobile device. I've left off a lot of very nice machines this way; but I kept it to a chart I could create in an evening.
There are no changes in the chart at this time; I'm just editing the introduction and moving it to the top of the posts.

All data in the chart is based of specs and prices published on the manufacturers' sites, or on their resellers. Better pricing or better feature sets may be available elsewhere, but these should serve as baseline specs.


Manufacturer:HPHPFujitsuFujitsuGatewayIBM/LenovoAcerToshiba
Make:tc4100tc1100Lifebook T4020Stylistic ST5032DCX200ThinkPad X41TravelMate C10Tecra M4
Model:FPCM10664FPCM35222X18695CUC314XMi
Style:ConvertibleSlateConvertibleSlateConvertibleConvertibleConvertibleConvertible
CPU:Pentium MPentium MPentium MPentium MPentium MCentrinoPentium MPentium M
Max CPU Speed (GHz):21.221.22.131.522.13
Cache Size (MB):22222222
Cache Type:L2L2L2L2L2L2L2
Bus Speed (MHz):533400533400533400533533
Base RAM (GB):0.50.250.50.250.50.50.50.25
Max RAM (GB):222221.521.5
Display Size:12.110.412.112.11412.114.114.1
Display Resolution:1024x7681024x7681024x7681024x7681280x7682048x15361024x7681400x1050
Display Colors:1670000016700000167000001670000016700000167000001670000016700000
Display Type:TFT XGATFT XGATFT XGATFT XGATFT XGATFT XGATFT XGATFT XGA
Video Card:Intel Graphics Media Accelerator 900NVIDIA GeForce 4 Go 420 with 32MB (4X APG)Intel® Graphics Media Accelerator 900Intel® Graphics Media Accelerator 900ATI RadionIntel Graphics Media Accelerator 900NVIDIA® GeForce™ Go 6200 graphicsnVIDIA?GeForce Go 6600 TE
Video Memory (MB):1283212812864128128
Hard Drive (GB):40406040604040
Max Hard Drive (GB):806080808010010080
Hard Drive Speed (RPM):5400540054005400540054005400
Optical Drive:Multibay OptionNoneIntegrated DVD/CD-RWNoneModular 8x Multi-Format Double
Layer DVD Writer (DVD±R/±RW/CD-RW)
MultiburnerModular variable-speed
CD-RW/DVD-ROM combo drive
8X DVD Super Multi-drive
(Double Layer)
Wireless:Intel Pro 2200Intel Pro 2200Intel Pro 2915ABGOptional Atheros Super AG®
Wireless LAN (802.11a/b/g)
Integrated 802.11 b/gIntel Pro 2200BGIntel Pro 2200BGIntel® PRO/Wireless 2200BG
Bluetooth:OptionalOptionalIntegratedNoneNoneNoneIntegratedOptional
USB Ports:3 (2.0)2 (2.0)2 (2.0)2 (2.0)3 (2.0)2 (2.0)3 (2.0)3 (2.0)
Video Ports:VGA, S-VideoVGAVGAVGAVGAVGAVGA, S-VideoVGA, S-Video
Audio Ports:In/OutIn/OutIn/OutIn/OutIn/OutIn/OutIn/OutIn/Out
Network Ports:RJ-45RJ-45RJ-45RJ-45RJ-45RJ-45RJ-45RJ-45
Network Speed:10/100/100010/10010/100/100010/100/100010/100/100010/100/1000Gigabit10/100/1000
Telephone Ports:RJ-11RJ-11RJ-11RJ-11RJ-11RJ-11RJ-11RJ-11
Modem Speed:56K56K56K56K56K56K56K56K
IR:Fast IRIRIRIRNoneIRFast IRFast IR
Microphone:NoneYesDual, noise cancellationDual, noise cancellationNoneNoneIntegratedIntegrated
Battery:6 cell (5.5 hour); optional 8
cell travel battery
4.5 hours6 cell9 cell (up to 10 hours)12 cell4 cell8 cell6 cell
Docking Port:YesYesYesYesYesYesYesYes
Memory Card Slots:1 SD1 SD1 SD1 SD7-in-11 SD4-in-11 SD
Expansion Card Slots:1 Type I/II1 Type II1 Type II1 Type II1 Type II1 Type I/II1 Type II1 Type II
Dimensions:(34.3 (at front) x 285 x 235
mm)
(27.4 x 21.6 x 2.0 cm)29.2x23.6x3.634.3x22x2.234.5x26.7x3.526.7x26.7x3.532.5x27.2x3.628.9x32.8x3.8
Weight (base, kg):2.081.41.91.83.21.62.82.8
Warranty:3 years parts and labor, 0
on-site
3 year limited1 year limited1 year limited1 year parts and labor3 years parts and labor, 0
on-site
1 year parts and labor3 year limited
Extended
Warranty:
3 year 9x5 pick-up with
accidental damage
3 year 9x5 pick-up with
accidental damage
3 year on-site, screen damage
repair
3 year on-site, screen damage
repair
4 year Total Protection (on
site, accidental)
4 year on-site, 24x73 year, including screen damage3 year, on site, System Guard
Price (Maxed out, $):30342566367639502759311223063353
Notes:Can't price max memory.Can't price max memory.Embedded TPM, dedicated Smart
Card slot, Fujitsu Security Application Panel, Fingerprint Security, Extra 3
cell battery
Embedded TPM, dedicated Smart
Card slot, Fujitsu Security Application Panel, Fingerprint Security
FirewireFingerprint readerCan't price max memory.
Firewire.


Gateway CX200X: First impressions
As I mentioned, this is not a machine for light-weights. And the extended battery only makes that worse: it sits outside the back end of the machine and nearly a a half inch below the bottom. I mentioned once that I learned to type with an old manual typewriter in my lap. Well, putting the CX200X plus the battery in the lap reminds me a lot of that. If weight bothers you, this is not the machine for you.

But if weight doesn't bother you, then that expansion battery actually is a nice touch. No, not in keyboard mode, but in slate mode: the way the expansion battery protrudes out the bottom forms a sort of grip, making it very easy to hold the machine in your left hand while writing with your right. It's much more stable than the M200 in that regard. The battery lock feels very solid: I don't have any concern about carrying the unit by the battery.

OK, Gateway wins the "why didn't somebody think of that" award. Have you ever rebooted a computer and scrambled to try to remember which arcane keystroke combination would take you into BIOS mode or system set-up or safe mode? The right key combinations vary from one manufacturer to another and sometimes even between machines from a single manufacturer; and if you guess wrong, the system will go on to boot up, and you have to try again. How many times did you have to keep rebooting until you found the right combination? Well, Gateway solved that problem: right there, right on the start up screen, it tells you what the keys are for various start up options. (And yes, I know that Gateway's not the first to do this; but why doesn't everybody?)

Where is that pen? OK, there it is, but how does it come out? The release switch for the pen is a bit tricky to find. (And no, I didn't bother to read the directions.) But it seems pretty secure.

The pen doesn't appear to have an eraser end. I didn't think I would mind, since the Tablet team gave me a nice Cross-brand Tablet pen with eraser end; but the CX200X doesn't appear to recognize that pen. Gateway must use a different digitizer technology than Toshiba does. So no eraser end for now. I'll miss it, but I can live without it.

The pen has more "drag" on the screen than the Toshiba did. I've heard some people argue that this provides more of a "paper" feel. Perhaps it does, but it takes getting used to.

The unit doesn't appear to automatically switch to portrait mode when you rotate the screen. On the other hand, the front panel has a very convenient rotation button that lets you toggle between different orientations instantly. While the automatic rotation would be nice, the rotation button is much more useful. I can think of a large number of times where quickly changing rotations would've made a demo or a presentation go more smoothly. Also, I'm seeing a lot of people using their slate Tablets in landscape, and it seems to work for them. So it's not safe to assume that everyone wants auto-rotation. (I still hope there's a setting for it, and I just haven't found it yet.)

Another useful front button is the Journal button, which pops up Windows Journal. This is really handy for making quick notes on the fly; but I wonder if it can be reprogrammed for OneNote side notes. I'm actually a big Journal user, but I'm using OneNote more and more often.

To round out the front panel, there's a four-direction toggle with a button in the middle, a Task Manager/CTRL-ALT-DEL button, a power button, and a power button lock.

It is so nice to have a DVD drive internal to my Tablet PC. For the past year plus, I've had to take a big, clunky external drive on every trip. Again, the DVD adds weight, so it's not for everyone; but it's worth it to me.

Nice speakers!

The touch pad has two things that I hate: tap-to-click, and a side-edge scrolling zone. I turned off the tap-to-click already; but surprisingly, I like the side-edge scrolling zone on this model. What's different from the side-edge scrolling zone on the Toshiba (which drove me nuts)? Well, they put just a very slight ridge separating the touch-pad area from the side-edge scrolling zone. That's just enough tactile cue to let me tell which area I'm in, which was always the problem with the Toshiba's scrolling zone.

The touch pad's left button is twice as large as the right button. That's a nice idea, but I'm still getting used to it.

The control and editing keys couldn't be placed more differently from those on the Toshiba if Gateway had tried to make them so. It's goimg to take a while to adjust to the new layout; and in this machine transition stage, it's really confusing me.

Popped in a wide-screen DVD. Ah, this is how DVDs should look on the computer. The wide-screen is perfect. Nice display quality.

The wide-screen keeps surprising me. The screen resolution isn't extraordinary; but with the wide-screen, there's so much space! I'm not sure, but I think this will change the way I work. I'll be able to work comfortably in two windows side by side: app and debugger, Word doc and notes, etc. That could be useful once I get into the habit.

Well, that's day one with my new machine. All in all, I'm very happy with it.

Tuesday, November 1, 2005

The quantum probability waveform collapses...
...and we know where the CX200X is:

Gateway Box

Gateway Box Open

CX200X

Right in my house! Around 12:30, the dogs started their "we really mean it this time, somebody's here" barking. I went to the door and thought, "Hey, I wonder what FedEx is delivering? After all, Gateway sent me a UPS tracking number." Then I saw the cow box, and I new the CX200X was here.

The confusion appears to be because Gateway sent the order in two boxes: the spare battery is coming via UPS, while the system came via FedEx. Go figure. And for whatever reason, they didn't give me the FedEx link. So while I've been carefully watching the battery's approach (due tomorrow), the system box snuck in through a flanking maneuver.

Of course, it's easy to be fooled by the battery: that one package weighs three pounds by itself. There's a lot of good things about the CX200X, but it's not for people who want a light-weight machine!
How to convince us that you're not serious about e-books...
...completely botch the organization of you e-book section.

Here are Amazon's top 20 e-book titles in the category of Books > E-Books & E-Docs > Computers & Internet > Programming. The highlighted items actually fit the category. The rest are about as wildly misshelved as you could imagine.

1. Jim Cramer's Real Money: Sane Investing in an Insane World

2. It Happened One Autumn

3. YOU: The Owner's Manual

4. Embers Falling on Dry Grass: Prologue to Knife of Dreams

5. Overcoming the Five Dysfunctions of a Team: A Field Guide for Leaders, Managers, and Facilitators

6. Bad Attitude

7. My Fair Temptress

8. Triad

9. Why Do Men Have Nipples?

10. Alcandian Quest

11. 1776

12. It Works

13. USB Complete, Third Edition

14. A Warrior's Will

15. Consent to Kill: A Thriller

16. One Night with a Prince

17. The Empress' New Clothes

18. Spell of the Highlander

19. HOT N' NAUGHTY! Sizzling Erotica - Anthology of Erotic Short Stories

20. Understanding by Design, Expanded 2nd Edition

3 out of 20. Great job, Amazon! I can't spare the time to cull through that much junk to see if there's anything good there.
Posted in Opinion by Martin L. Shoemaker on Tuesday November 1, 2005 at 7:20am. 3 Comments 0 Trackbacks
Outlook hazy. Try later.
So after two weeks in the "Order Processing" state, my Gateway CX200X order skipped the whole "In Production" state, and jumped straight to "Shipping", according to the Gateway site. Yet the ETA is still listed as 11/9.

A call to Gateway's automated status line says that the system was produced on 10/29 and will arrive in 3 to 5 business days.

The UPS Web site reports that the order left Gateway yesterday at 4:06 p.m. and reached Nashville at 1:08 a.m. this morning. That's roughly a 9 hour drive from Nashville to my house, straight through. Of course, it won't go straight through, but will stop at various UPS transit stops along the way. At a minimum, I expect two more stops before it gets here. There's an outside chance it could get here today. There's a very good chance it could get here tomorrow, 11/2.

And if it doesn't get here until Thursday, I'll be on the road to Boston and Huntsville, and won't get home until... 11/9.

UPDATE: Left Nashville at 3:23 a.m.