Monday, January 23, 2006

Horizons, Old and New

My own horizons seem to be bounded mostly by technology and family, so I'm pleased when they come together, and last week when my third-grader's class talked a lot about the New Horizons taking off for Pluto, she seems to have spoken up about her daddy's baby brother, the rocket scientist...

ROGER MYERS is Director, Systems and Technology Development Department, Aerojet - Redmond. Dr. Myers leads development, qualification, and first-article flight production efforts in electric and chemical propulsion technologies and systems. ...... Pluto New Horizons ...

I guess it's geeky stuff, not exactly what the dramatic photos are all about, though the mission overview (PDF) does mention "Propulsion system (used for pointing, course corrections, and KBO targeting) includes 16 hydrazine thrusters", and NASA's press kit (PDF) does mention "Prop./Aerojet" somewhere down on the organization tree, on page 40.

I don't want to ask her exactly what she said about thruster development, but it's likely that she understood fairly well. You see, last week she also watched Captain Picard on a DVD of the Enterprise: Next Generation series as he shut down the main engines and used low-energy "thrusters" for delicate maneuvers, even using a gravitational field to gain velocity with a slingshot effect. And she already had a pretty fair notion of distances because she knows that if we put the Sun on our driveway, and Mercury four steps away, then Venus will be seven steps from the Sun, Earth will be ten, Mars will be 16....and so on, with Pluto most of the way to the coffee shop, each a little less than double the one before -- Bode's law.

She does have a tendency to stop and think where she wants the Vulcan, Klingon &c planets to be. And the conversation veers -- she has heard, and probably remembers in fragments, that her uncle's middle name is Metcalfe, and that her grandfather (Phil Myers, like her uncle Phil) had a grandfather (Tom Myers) whose grandfather Thomas Metcalfe was in the war of 1812 at Fort McHenry while the rocket's red glare meant something else entirely, and that this grandfather's grandfather's grandfather was the one who made up the grace that Daddy likes to say at least on Thanksgiving: "Bless this food, for that use, for which Thou hast intended it. Bless the hands that prepared it; qualify us for life; prepare us for death; Heaven crown us Thine; Amen." Daddys are peculiar that way. And then I start talking about the letters that g-g-...uncle Edgar Metcalfe wrote from Australia --- as an inventor who went broke on borrowed money before the Civil War and was shanghaied aboard the whaling barque Draco and jumped ship on the other side of the world and we do have cousins over yonder, so she's probably a little bit confused. I'll show her the letters someday, but I don't like to unfold them. But it's all about technology, and about the family Bible where Thomas Metcalfe's birth seems to be recorded with Medcalf/Metcalf and other spellings all on the same page, and about the "Metcalfe clock", a wooden clock that my grandfather had from the 1790s when metal was apparently hard to come by. (And I remember being shocked when Gramps repaired it with epoxy, but I wanted it, and he told me that I couldn't have it because it should go to the kid named Metcalfe, but Roger never got it. I suppose he gave it to a Maryland historical society instead.)

Pluto: most of the way to the coffee shop. (And by the time New Horizons gets there, her age will be more than doubled.)

Thursday, January 05, 2006

A MannX-Annotated Keene Flood

In the last week of 2005, I started with Jon Udell's SWF screencast on the October 8-9th flooding in Keene, NH. The screencast itself is at KeeneFlood.html and while it's showing, if you go to the address bar and enter

you can get out the count of the 2821 frames that he put in; you're talking to Flash.

I then typed a transcript for that screencast, into a document I called theScript.xhtml. That didn't take long; it's not a long movie. Then I editted a config.js file to refer to the SWF file, and started up the MannX browser app which let me synchronize the SWF file with the transcript; the author-mode interprets a click on the transcript as the assertion "the movie's current time corresponds to this point in the text," and it adds markup to the text. That was pretty quick, too. MannX constructed an XHTML template commentary file, with a slot for a comment on any given video segment; I filled in some of these slots, and ran an XSLT script to generate the actual commentary.

Finally, I constructed a glossary for the words in theScript; this was actually the slowest part, and the most annoying. I could have left the definitions empty, but I looked them up in Google (because it's faster than looking them up in wordnet; I have buttons for both.) The most important part of each definition is just the identifier, like "kid_n1" where "kid" might have several meanings. And I added some assertions at the base of the glossary: kid_n1 subClass person_n1, for example, to say that a kid is a kind of a person (at least for this usage of "kid".)

Now I can go to or directly to and wait for the movie to fully load, then click on the script to select a segment, then play it with the play button...or get the movie to a given point and click "M" to synchronize movie and commentary...or select a place in the commentary and click "C" to synchronize movie and script. Hold the mouse over a comment and you see that its title attribute is the text of the script-segment on which it comments. Personally I always toggle the PlayOnSelection button from "Off" to "On" so that as I browse script and commentary the movie autoplays, but my co-author doesn't want that to be the default.

And so on. The current segment's text is always put into a textarea; I can select a word in this textarea and look it up by clicking "D" -- that shows the definition and selects it as topic, or I can scroll in the glossary and click to select a topic. If the topic is "person", then I click the "T"opic button to move in the script, finding the next instance of "person" -- which may actually be an occurrence of the word "kid".

It's far from perfect but I'm really rather pleased with it, and so is my co-author, and I hope that Jon U. doesn't object to my using his screencast this way. Various versions of MannX in various programming languages have been used for lessons in Russian, Greek, Hebrew, Spanish, and lately Pashto for the University of Kabul. (If you have installed Sun's Java 1.5 and JMF, as well as a Pashto font such as the Abdaali font from, you can go to or various other demos; note that the commentary is simply a translation into Pashto, and the title of each element is the English from which it was translated.)'s a lot easier now that I've got Unicode and my old problems with Japanese and Chinese (and even Russian, where I once had to alphabetize separately for (English+Russian)/(Windows+Mac)) simply don't arise.

I can't yet use this with Google's FLV files because they tend to report the CurrentFrame as frame 0 and TotalFrames as 1, so my MoviePlayer.js knows how to play my JMF applet and it knows how to play SWF, but it doesn't know how to play FLV. Maybe soon...especially after Flash 8 comes out for Linux.

I'm really hoping that something resembling this can be a basis for education world-wide, where lectures and demos on every topic are maximally available. I'm hoping that it can be a basis for journalism, where every interview will have a transcript and multiple commentaries. I'm hoping that it can be a basis for videoblogging.

Or then again, maybe not.

Update: I've added an ability to link directly to a segment or timerange, as well as to play automatically; for example,;playOnSelection=true and;playOnSelection=true will work, but the primary annoyance is that you really have to wait for SWF file to load. (The "please wait..." in the textarea goes away.) does not have a fast server, and this can take as much as thirty seconds for Jon U's multi-megabyte SWF file. His own server is several times faster, and I can get far less annoying performance by simply uncommenting the line

// movieFilePath="";
in the configuration file It's very sad that this is not a universal solution.

At the moment, I'm working on a multiMoviePlayer javascript class, for AJAX-style management of partial downloads of a SWF file which has been broken into several pieces. I can certainly write a playRange function which will start up SWFplayer N+1 when it comes to the end of SWFplayer N; the question (well, one of several questions) is whether or not I can do a smooth transition, given that the players have to be playing in the same spot on the screen. This I don't know.