Friday, February 15, 2008

Feeling a little loopy

I've been working on the Rosetta project at work non-stop for about ten days now. Non-stop means a couple hours off nightly for dinner and playing with the kids. The rest of the time is working on Rosetta. Last night we capped it off by working straight through until 7 AM to get things read for our 8:00 demo. I went home and had dinner as described in the previous post, then went back to work after Rachel's orchestra time.

Most of my career has been working on back-end systems so I'm going to take advantage of having a project I can take screenshots of and explain what I've been working on.

Rosetta, as you can guess from its name, translates the unintelligible. In the screen shot -- click on it for a larger view -- you see two panels. In the left there is a textarea labled "Raw view." This is an ancient COBOL system that we're dragging kicking and screaming into a more modern UI. On the right is the modern UI, translated by Rosetta. (Actually, that is the ugly "development" UI, for the demo we sexed it up with chrome designed by a professional. But that code is in another branch and only runs on Windows, and I'm not motivated enough to fire up a VM to take screenshots.)

Rosetta does its magic through a combination of sophisticated reasoning about the raw area, and manually added hints. The rest of the left pane in the screen shot is the "hint editor." To a first approximation, I wrote the hint editor and the layout engine; Gary wrote the low layer that turns the COBOL system's customized vt100 dialect into the raw area and makes the first stab at deciding what it represents.

For an example of the manual hinting -- you can see in the screenshot that there is a table labled Days/Times. The first column is MTWTFSS -- and so is the fourth. The second and third columns are also repeated. The COBOL system does this because it's the only way they can cram the information into 80 by 24 characters, but in a modern UI you'd never do that. So on the right you can see that instead of four rows and 6 columns, we cut it apart and put it back together into the logical 8 rows and 3 columns. This takes less time to add in the hint editor than it took you to read about it here. (I probably don't need to mention that I didn't bother making the hint editor pretty. The user of the system will never see it.)

Ten days and two developers is a very aggressive schedule for this. We had to handle wildly different screen layouts, break some into pop-up dialogs, and make it not look like ass, with just the existing text to go on. At the demo this morning, you could tell that our co-workers in New Jersey were impressed. (A couple of them don't have personalities that let them admit this easily. But it was there even for them.)

There's actually a bit of a back story here. There's a faction in the larger company that prefers to develop software by throwing masses of junior developers at it. There are positive aspects of doing this, especially from a management perspective, but there are also drawbacks. Rosetta was our first semi-autonomous project to sell them on the concept of small numbers of highly skilled developers could do.

We hit it out of the park.

No comments: