From Woozle Writes Code
Jump to navigation Jump to search

When I worked for Carrier Transicold, they used an ancient DEC-based enterprise business package called "ManMan".

It was written (as with most DEC stuff) for TTY terminals, and didn't know anything about modern newfangled relational databases.

As the PC era gradually edged its way into the front office, people started writing their own little data apps in MS Access, some of which used various kluges to grab bits of data out of ManMan. Some of them were in Access 7 and some were in Access 2, and they used different methods for talking to the DEC machine, and some were reliable and some had to be babied by their authors much of the time... you get the idea.

By the time I came on board, there were maybe a couple dozen of these apps, and very little documentation of how any of them worked or what they were supposed to do – but it was clear that they were being used regularly, and (especially given the increasing number of times IT had to be called in to fix one or another of them) that front office operations depended on them heavily.

So one large part of this was what we called the Augean Stables project: document the intended purpose of each of these apps, look for any redundancy, y2k-remediate them (y2k remediation was, I think, the reason we got clearance to do any of this cleanup), and get them working according to spec.

A large part of that was coming up with a reliable and maintainable way for them to talk to the ManMan server.

Mostly, the existing apps had been using this weird super-powered smart-terminal app that had its own BASIC-like scripting feature and communicating with it via DDE (a weird old Windows protocol). So we had bits of code in three different formats: VBA (Visual Basic for Applications), DDE commands, and the terminal's version of BASIC. It was a huge mess.

I figured out, though, that all the terminal app really needed to do was enable direct communication between VBA and ManMan, and that this could be done via a standard ActiveX control which was basically a dumb TCP/IP socket. All of the scripts could be rewritten in VBA, and the DDE could go away.

The tricky part was making sure that requests to the DEC machine were handled in some kind of verifiable manner -- so we would know, say, if one app was having a problem getting its data back, and we could answer questions like "what's the current turnaround time on ManMan requests?"

So we wrote this sort-of-elaborate-but-conceptually-simple request-and-response queueing system, to handle requests from all the different apps, scrape the various ManMan screens in a systematic way, and return the data in normalized MS Access tables.

We called the system "Socket to the ManMan".