by Steven K. Roberts
Nomadic Research Labs
Santa Clara, California
August 12, 1996
Law Number XLVIII:
The more time you spend talking about what you have been doing, the less time you have to spend doing what you have been talking about. Eventually, you spend more and more time talking about less and less until finally you spend all your time talking about nothing.Norman R. Augustine, from “Augustine’s Laws“
Yow! I see why fiberglass guys charge extra for swinging a grinder. Last Sunday we moved the boat for the first time since we arrived here 8 months ago. Creaking on the rustbucket trailer, she emerged slowly into the blazing sunshine in preparation for surgery.
Ross Handy arrived from o’er the hill, and we made a quick Home Depot run to add 9″ tungsten-carbide Super Sawzall blades to our growing arsenal of fiberglass demolition tools. Then it was time for the three of us to suit up… head-to-to Tyvek bunny suits, goggles, respirators, taped-on gloves; looking like something from a Grade B bio-horror movie, we began sweating and itching even before taking that first bite out of the boat.
The big job before us was the elimination of what has become known around here as the “tankage” — a network of glassed-in compartments with lift-off access ports that surrounded the original daggerboard trunk, presumably installed as a way to do something useful with the essential horizontal structures that coupled daggerboard bending loads into the hull. In our new design, a pivoting centerboard will occupy a long but shallow trunk, supported with a robust brace along its full 5′ length to the starboard hull side (underlying the port-facing bench seat), and a similar one, much lower, on the port side (making a footwell). In other words, the old stuff had to go.
All along, I had assumed that this would involve an easy hour or so with the Sawzall and a quick sanding clean-up, but Sunday I gained deep new respect for the tenacious nature of fiberglass-epoxy structures. This stuff doesn’t give up easily, and we spent hours in a sweat-saturated itchy purgatory, ripping with carbide blades, raising smoke from a cutoff wheel in the little Makita grinder, and spewing great plumes of white dust from a particularly nasty 7″ masonry-gobbling grinding disk on Ross’s monster grinder. I would step outside now and then to pour out my gloves and grab a few gulps of unfiltered air; mid-day we sucked down a trio of Wart Hog microbrews and hardly noticed. A box fan in the forward hatch kept a too-subtle airflow going through the boat, and the GSM (Great Sucking Monster) perched on the foredeck inhaled pounds of the white stuff while dramatically demonstrating the inadequacy of vacuum-cleaner filtration technology. Ross did most of the grinding, periodically handing the wicked machine to Faun or me to rest his arms and impart a few how-to tips.
By the end of the day, the tankage and centerboard trunk were history — the new airfoil-shaped hole in the bottom of the boat a convenient drain for the interior washdown. We hosed off the parking lot, ourselves, our tools, the boat, the building, the shopvac… but still the itching persisted for the next three days. None of that really matters, however, because the Microship interior is at last clear for the installation of new structures.
First on the agenda is the main bulkhead, with a forward-opening hatch to allow passage into the hydroponics bay. This is designed to maintain a seal if the forward compartment is holed and flooded, and will consist largely of Lexan to pass light and give a more open appearance (besides, at sea, the entertainment of watching the plants grow will be on a par with electronic media on land… we’ll take the term “couch potato” very seriously). I’ve been in conversation with John Marples about the structural details of the bulkhead, which has to carry mast compression loads around the hatch opening and evenly into the hull.
Also next is the new pivoting centerboard and associated structure, including a sort of angled hawse-pipe that will route the control lines along the plane of the bulkhead upward and clear of the hatch, emerging at a point on deck that allows them to turn straight for the cockpit while clearing the doghouse to starboard. This latter structure will either be patterned after or directly molded from the one on the Antrim 30, and will provide standing headroom and excellent all-around visibility below.
Once all this is complete, along with some improvement of the running backstay chainplates, we’ll be ready for rotating rig installation — the 50% deposit was sent last week to Mike Leneman, who predicts delivery at the end of this month. So finally, after over a year of staring at the mostly untouched boat while doing electronics and making vague sketches, we see physical progress… with a growing probability of initial test sails before the brutal California winter sets in.
Hubnode Task Complete!
In dramatic counterpoint to grinding and sawing, I spent most of the week writing the key piece of FORTH code that brings the ship network to life. I’ve been looking forward to this for almost two years.
I reported on the start of this in Issue #109 — the goal was to turn this mess o’ microprocessors into a single fault-tolerant system with a single, consistent front-end. The Hub, which until now has been little more than a transparent multiport data switch that allowed the Mac to communicate with any node, has become, from the perspective of the user, the only control system in the ship.
The trick depends on the multitasker, allowing an autonomous task to scan all the nodes every few seconds while another keeps watch on now-local variables of interest. Neither interferes with the interpreter itself, allowing the user interface software (HyperCard and wireless Newton eventually, but at the moment a text front end via MicroPhone) to interact freely with the system. The nodescan task continuously updates a local collection of relevant variables… including a set of watchdogs (PUPPY-T, PUPPY-V, and so on — these are small computers that only need small watchdogs). On each cycle of the scan, the Hub writes the ASCII ‘-‘ symbol to the appropriate PUPPY, and a task in each node is responsible for changing it to a ‘+’ before the next scan comes around.
The net effect of this, so to speak, is a corresponding variable for each node that drops from + to – if the node’s tasker quits. This is easy to detect, of course, and signals the Hub (and Host) that the node needs a nudge. But in addition, this scheme can tell if the node has died completely… the code that inhales the response to the watchdog query is set to timeout and pass an error if there is no response. This writes a blank into the PUPPY variable, offering a third detectable condition. (Later code in the nodes can be used to add other useful indications such as error conditions, though the other variables in the general nodescan facility would normally be used for all application-specific communications.)
A key trick here depends on the semaphore tools in Bill Muench’s FORTH multitasker, since we have more than one task that could asynchronously attempt to own the multidrop line. Obviously, chaos would result if the nodescan task was happily collecting variables and some user decides to transmit a command to a node from MAIN (the console task). The solution is simple: a variable called BEELINE contains either 0 or the ID of a task that currently owns it, accomplished by saying BEELINE GET at the beginning of a communications event. The GET word does a PAUSE if the network is busy, allowing the task to swap out; otherwise, it stuffs the task’s ID into BEELINE and continues. When comm is complete, the command BEELINE RELEASE lets go of the resource and others are free to use it. This is the same method we’ll use to interlock variables or strings that may be partially written when another task wants to read them.
I should note that the entire multitasker is a 2.5 page listing with only 22 FORTH words defined… and it compiles into a whopping 780 bytes. You can see it in the FORTH listing for the Video Turret.
So how does all this feel? The control network suddenly has much more personality. At the Hub (which, if you’re new to these reports, is a New Micros FORTH 68HC11 board with 32K of RAM), there is a small LCD with 2 lines of 40 characters each. The top line is a low-level status indicator, and the second will eventually sequence through a succession of sensor readings and other conditions. At this instant, the display looks like this:
13:04:52 <*> (A D F+H P T+V+) [s2a0v1] | | NRL Microship Control System |
(Obviously, this is not the ship’s GUI.) This basic system status annunciator is updated every second, and gives the time of day, the identity of the currently addressed node or * for none, the status of all the nodes (F, T, and V alive at the moment; the other 4 nonexistent), and the number of connections active in each of the crossbars (2 serial, no audio, and one video). Coupled with the matrix of 48 LEDs driven by a PIC processor built in ’91 by Daniel Kottke for BEHEMOTH, this is all the basic status info needed to determine low-level health of the Hub and all nodes. If I unplug the network from Node F, the + disappears within a few seconds; if I instead hit reset, it becomes a – and stays that way until I restart its watchdog task.
In the final implementation, the console Macintosh will be keeping an eye on all this, and is empowered to reset the whole network, cold-start any node, and recompile applications as necessary — all without human intervention or awareness… though I will of course read about it later in the system’s log and enter hack mode if it reveals a chronic problem.
This has been an intense little coding marathon, and I’ve learned a lot more about this language than I knew two weeks ago. The deeper I get into it, the more respect I have for FORTH… it’s both high and low level at the same time, allowing you to talk to a system in something approaching English while still feeling the bits between your toes. From this point forward, all the software development on the ship should be pretty much application-specific… the essential Hub-Node integration tools are done.
Updates And Geek’s Vacations
Finally, as is our custom, we have a few short updates on matters various.
First, the new wind generator (AIR Marine) has arrived, and we decided to use a 12-volt model even though the *main* power system is 24 volts. I was becoming more and more concerned about having only 24V charge sources when the primary control and communication systems all live in a 12V environment: the potential impact of losing the critical DC-DC converter between the two worlds was too great (and no, I wasn’t interested in asymmetric discharge of the bottom half of the battery bank.) Also, accommodating multiple simultaneous charge sources of different flavors was non-trivial. The design now has the 24V/270AH propulsion bank fed by a 20-amp AC charger and about 36 amps from solar panels via the peak power tracker, and a 12V/105AH systems battery fed by 0-28 amps from the wind generator, 10 amps from the 24V-12V converter, and about 4 amps from a couple of dedicated solar panels. (The 28 amps from the wind generator, by the way, is in a 30 knot wind; more sane conditions, like 10-20 knots, yield 2-12 amps.)
Speaking of the peak power tracker, we have a volunteer who is now investigating the compilation of the 18 PWM channels into a PGA… so far, it looks like we may be able to eliminate about 45-50 ICs from the design. More details as this develops!
Finally, as I’ve mentioned a time or two herein, we’ve had some good results lately by offering a “geek’s vacation” to experienced techies who want to take a break from normal work, sample the techno-harvest of Silicon Valley, and participate in a multidisciplinary project where the bottom lines are fun and adventure. If this sounds interesting, let me know… we provide food, latte, beer, crash space, and general amusement in exchange for an infusion of skills and time — usually, a pretty good win-win.
The Cyberlife filming is tomorrow, and we may have to break away later in the week for a kayaking day… sunshine on concrete, however bright, just isn’t the same. In the meantime, cheers from the Shipnet console, where the latest news is that nodes F, T, and V are still chugging happily away!