Tombstone
GEM (Graph Editor & Modeler)
Jun 2005 – Jul 2005 · age 23
What it was
A graph editor in Java and SWT, built as a graphical front end for probabilistic models at a university research lab, that knew nothing about probabilistic models. It knew about graph types, declared in XML: which kinds of node exist, which edges may join which kinds, how many, and whether the whole must stay acyclic, connected, a tree or moral. The editor enforced those rules live, refusing a bad edge the moment it was drawn. A tensor widget laid out each node's probability table with axes taken from its parents, and when a parent was added it remapped the existing numbers by name instead of wiping them. A compiler turned any graph type into typed C++ readers. Two C++ programs proved the pipeline: a hidden Markov model evaluator, and an automaton that generated Conway's look-and-say sequence. Three weeks, an installer, then summer moved on.
Wins, for the age
- At twenty-three, Jeff made graph types data and enforced them at edit time, a year before Eclipse GMF (2006) brought model-driven diagram editors to the mainstream.
- One editor served Bayesian networks, dynamic Bayesian networks, influence diagrams, Mealy machines and a board-game map, just by swapping a file.
- Conditional probability tables that reshape themselves from the edges and keep their numbers, the thing Hugin and Netica (1995) already did, found again from first principles in three weeks.
- Compiled the schema into typed C++ readers with alignment checks, the old CORBA IDL (1991) instinct, and proved it with two unrelated consumers before calling it done. A young mammal, already testing its own abstractions.
What it taught
- A good schema deletes most of the UI code. The whole controls package was instantiated from property definitions.
- Graph algorithms with a purpose: cycle, morality, connectivity and tree checks, each small, each serving the type system.
- Generate the boring readers, and check alignment, because silent format drift is the bug that hides.
- Never swallow the exception that says a file no longer matches its schema. The empty catch blocks here said nothing.
Genealogy
Ancestors: none on record. The first time a schema became an editor. Descendants: Jovian Suite: a visual editor compiling a typed model into generated code.
Epitaph
Here lies GEM. Tell it what a graph was allowed to be and it would draw one, refuse the wrong edges and hand you C++ to read it. It spent its one summer between a Bayesian network and Conway's sequence.