A lot of social software could be called nosyware…

In 1990, I wrote (what you might call) my first social software program when I started college / was introduced to a VAX mainframe for the first time. In MAP.COM, I used VMS DCL to draw a plan view of the computer room in the UCG Engineering Building, but with the names of users superimposed on the terminals they were logged into. You could be in a computer room, see that user ELEBRESLIN was seated two terminals away, and if you were brave enough, strike up a conversation (and if not with real words, maybe using VMS PHONE!). I didn’t realise it at the time, but Anthony Kelly had written nearly the same thing two years previously in BASIC – his TERM.BAS showed logged-in terminal IDs in bold, and you could then type in a specific terminal ID to find out which user was logged onto it. My own MAP.COM was horrible looking code but it worked and became pretty popular (see V2 at the end of this post)…

In fact, I found yet a third version of this utility (written by Peter Muldoon in FORTRAN, and called PLANT.FOR), which I adopted as my own and kept modifying for another four years. During this time, PLANT»> grew to about 700 lines long, could do multiple room views, supported timed / continuous refreshes, allowed people to create personal display aliases for the users being shown on screen, and even had a baby brother called SAPLING (groan!). In its heyday, there were about 180 people who regularly used the program… In essence, PLANT»> was just a search-and-replace utility, which I reduced to two lines of code in a 1995 cgi-bin version (see previous blog entry on WebPLANT»>).

The point of this reminiscing is that the reason PLANT»> and its predecessors were so regularly used on the UCG undergraduate VAX mainframe is because many people are either (partial) extroverts or simply curious about others (i.e. nosy!). The extroverts will set their process names to something like Gandalf or Johnny B. (*cough*) in the hope that other inquisitive people will be requesting a list of all logged-in users and wonder who they are… It’s much the same motivation that makes people blog or set up social network profiles today!

$ ! USERS.COM Version 2.0, 25 October 1991, John Breslin
$ NOBROADCAST = F$GETDVI("TT","TT_NOBRDCST")
$ PROCESS = F$PROCESS()
$ VERIFY = F$VERIFY()
$ ON CONTROL_Y THEN GOTO END_LOOP
$ ON SEVERE_ERROR THEN GOTO END_LOOP
$ SET TERMINAL /NOBROADCAST
$ SET PROCESS /NAME = "USERS>''F$GETJPI(0,"PID")'"
$ SET NOVERIFY
$ SET MESSAGE /NOFACILITY /NOIDENTIFICATION /NOSEVERITY /NOTEXT
$ TYPE SYS$INPUT
[2J[H)0lqqqqqqqqqqqqqqqqqqqqqqqqqqk    [1mTTB3    TTA2    TTA7    TTB1    TXA7    TTB6[0m
x[1mUSERS> Version 2.0       [0m)0x    x  x    x  x    x  x    x  x    x  x    x  x
x                          x    mqqj    mqqj    mqqj    mqqj    mqqj    mqqj
mqqqqqqqqqqqqqqqqqqqqqqqqqqj
    [1mTTA3    TTC3    TTB0                TXA4    TTD4            TTC4    TTC2[0m
    x  x    x  x    x  x                x  x    x  x            x  x    x  x
    mqqj    mqqj    mqqj                mqqj    mqqj            mqqj    mqqj

                                        [1mTTB5    TTB4            TTB7    TTD1[0m
                                        x  x    x  x            x  x    x  x
                                        mqqj    mqqj            mqqj    mqqj

                                        [1mTTA6    TTD6            TTA4    TTD2[0m
                                        x  x    x  x            x  x    x  x
                                        mqqj    mqqj            mqqj    mqqj

                        [1mTTA1    TXA3    TTC0            TTC1    TTB2[0m[0m
                        x  x    x  x    x  x            x  x    x  x
                        mqqj    mqqj    mqqj            mqqj    mqqj
$ SHOW USERS /FULL /OUTPUT = SYS$LOGIN:USERS.TMP
$ OPEN /READ FILE SYS$LOGIN:USERS.TMP
$ COUNTER = 0
$ BEGIN_LOOP:
$ COUNTER = COUNTER + 1
$ READ /END_OF_FILE = END_LOOP FILE RECORD
$ TIME = F$EXTRACT(32,23,RECORD)
$ IF COUNTER .EQ. 1 THEN WRITE SYS$OUTPUT "[?25l[7m[3;2H''TIME'[0m"
$ USERNAME = F$EXTRACT(1,12,RECORD)
$ LOCATE = F$LOCATE(" ",USERNAME)
$ LOCATE = F$LOCATE(" ",USERNAME)
$ USERNAME = F$EXTRACT(0,''LOCATE',USERNAME)
$ TERMINAL = F$EXTRACT(30,40,RECORD)
$ LOCATE = F$LOCATE(":",TERMINAL)
$ TERMINAL = F$EXTRACT(''LOCATE'-9,10,TERMINAL)
$ LOCATE = F$LOCATE("  ",TERMINAL)
$ LOCATE2 = F$LOCATE(":",TERMINAL)
$ LENGTH = LOCATE2-LOCATE-1
$ TERMINAL = F$EXTRACT(''LOCATE''+2,''LENGTH',TERMINAL)
$ IF TERMINAL .EQS. "TTB3:" THEN $ WRITE SYS$OUTPUT "[7m[3;29H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TTA2:" THEN $ WRITE SYS$OUTPUT "[7m[2;37H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TTA7:" THEN $ WRITE SYS$OUTPUT "[7m[3;45H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TTB1:" THEN $ WRITE SYS$OUTPUT "[7m[2;53H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TXA7:" THEN $ WRITE SYS$OUTPUT "[7m[3;61H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TTB6:" THEN $ WRITE SYS$OUTPUT "[7m[2;69H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TTA3:" THEN $ WRITE SYS$OUTPUT "[7m[6;1H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TTC3:" THEN $ WRITE SYS$OUTPUT "[7m[7;9H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TTB0:" THEN $ WRITE SYS$OUTPUT "[7m[6;17H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TXA4:" THEN $ WRITE SYS$OUTPUT "[7m[6;37H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TTD4:" THEN $ WRITE SYS$OUTPUT "[7m[7;45H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TTC4:" THEN $ WRITE SYS$OUTPUT "[7m[7;61H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TTC2:" THEN $ WRITE SYS$OUTPUT "[7m[6;69H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TTB5:" THEN $ WRITE SYS$OUTPUT "[7m[10;37H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TTB4:" THEN $ WRITE SYS$OUTPUT "[7m[11;45H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TTB7:" THEN $ WRITE SYS$OUTPUT "[7m[11;61H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TTD1:" THEN $ WRITE SYS$OUTPUT "[7m[10;69H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TTA6:" THEN $ WRITE SYS$OUTPUT "[7m[14;37H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TTD6:" THEN $ WRITE SYS$OUTPUT "[7m[15;45H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TTA4:" THEN $ WRITE SYS$OUTPUT "[7m[15;61H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TTD2:" THEN $ WRITE SYS$OUTPUT "[7m[14;69H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TTA1:" THEN $ WRITE SYS$OUTPUT "[7m[18;21H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TXA3:" THEN $ WRITE SYS$OUTPUT "[7m[19;29H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TTC0:" THEN $ WRITE SYS$OUTPUT "[7m[18;37H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TTC1:" THEN $ WRITE SYS$OUTPUT "[7m[19;53H''USERNAME'[0m"
$ IF TERMINAL .EQS. "TTB2:" THEN $ WRITE SYS$OUTPUT "[7m[18;61H''USERNAME'[0m"
$ GOTO BEGIN_LOOP
$ END_LOOP:
$ CLOSE FILE
$ DELETE /NOCONFIRM /NOLOG SYS$LOGIN:USERS.TMP;*
$ WRITE SYS$OUTPUT "[0m[19;1H[?25h"
$ IF NOBROADCAST .EQS. "FALSE" THEN SET TERMINAL /BROADCAST
$ SET PROCESS /NAME = "''PROCESS'"
$ IF VERIFY .EQ. 1 THEN SET VERIFY
$ SET MESSAGE /FACILITY /IDENTIFICATION /SEVERITY /TEXT
$ EXIT

3 thoughts on “A lot of social software could be called nosyware…

  1. Wow — guess who wrote a very similar perl4 script for the Maths Dept. terminal servers in TCD 😉

  2. Peadar ó Maoldúin December 18, 2007 — 2:15 pm

    Just goes to show, John – you can never do anything ever any more without it coming back to haunt you.
    BW sent me a copy of that Plant.for [for some reason I had “lost” it], and I’d have to say, it’s fairly cringeworthy at this stage.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this:
search previous next tag category expand menu location phone mail time cart zoom edit close