\begindata{text,271714732}
\textdsversion{12}
\template{default}
\define{symbola

attr:[FontFamily symbola Int 0]}
\majorheading{The Evolution of turnin

A Classroom Oriented File Exchange Service

}
William Cattey

(wdc@athena.mit.edu)

MIT Project Athena

1 Amherst Street

E40-349

Cambridge MA 02139


(617)-253-0140


\majorheading{Abstract}


From the beginning, MIT Professors wanted to use the Project Athena campus 
wide computer network to collect assignments. The \italic{turnin} program 
started off as a shell script that sent files to a central timesharing host 
for perusal by a grader.   When timesharing hosts were replaced by a network 
of workstations, \italic{turnin} became a network service layered on NFS.  At 
that time, programs were added to help graders sort through the files. 
 Student retrieval of prepared handouts and the exchange of papers in 
real-time were added.  Today, \italic{turnin} is a stand alone network service 
with cooperating servers and a replicated database.  It has been integrated 
with a WYSIWYG editor for composition of complex documents, and their 
annotation by peers and teachers.  The teacher side of the interface is 
evolving into a point and click gradebook interface. This paper describes the 
evolution of \italic{turnin} from its original  shell script form to its 
current integrated editing/formatting/annotating system.



\bold{\bigger{Introduction}}


Project Athena exists to deploy and maintain a campus-wide network of 
workstations and services (such as remote file access, printing, and 
electronic mail) to MIT for educational use.  In addition to deploying 
workstations and linking them together with the network, Athena develops 
software of general use to the MIT community, for example new system services 
(such as the \italic{Zephyr} notification service [DellaFera1988]), and 
educational software programs such as TODOR [Murman1988].


The \italic{turnin} system is both a file exchange system service and 
educational software.  It was developed in response to the request of MIT 
professors who wanted to use Athena to manage electronically submitted 
assignments.  The first version supported student submission of assignments, 
and teacher return of annotated assignments or new files.


Subsequent versions offered more capabilities:  real-time exchange of files in 
class, distribution of handouts, organization of papers to grade for the 
teacher,  and integration of file exchange with document preparation.


This paper chronicles \italic{turnin} from its beginning as a "silly little 
rsh script" to its present integrated application.


\section{1	Version 1: "the rsh hack"

}
The first version of the \italic{turnin} service had the least functionality, 
the worst user interface, and the most difficult set up process.  It was first 
used in the early days of Athena before workstations were installed.  At that 
time Athena consisted of 63 networked timesharing hosts.


The path followed by student papers is shown in Figure 1. Files exchanged 
through \italic{turnin} would start in the student's home directory on their 
assigned timesharing host.  The \italic{turnin} program would send the file 
over the net to a sub-directory associated with the course on the teacher's 
timesharing host.  The teacher would find the file, probably move it to his or 
her home directory, manipulate it, (perhaps compile it, perhaps edit it), and 
then move it to the course's pickup subdirectory, where the student could find 
it when he or she ran the \italic{pickup} program.  

\begindata{zip,272148332}
%ViewWidth 371
%ViewHeight 196
*D;-1400,896
N8.5X11
>-1400,896
*G;-1550,800
>-400,-800
*G;300,791
>1500,-800
*A;-1000,650
Fandy10
TStudent Host
MCM
*A;850,650
Fandy10
TTeacher Host
MCM
*A;-1000,500
Fandy10
Tstudent/home
MCM
*A;900,500
Fandy10
Tcourse/TURNIN
MCM
*A;850,250
Fandy10
Tcourse/PICKUP
MCM
*A;900,-500
Fandy10
Tteacher/home
MCM
*A;-1100,300
Fandy10
TFile
MCM
*O;-800,296
>783,405
*A;-100,396
Fandy10
T1
MCM
*O;900,396
>1400,396;1400,-704;900,-704
*O;700,-704
>400,-704;400,-104;800,-104
*O;763,-16
>-1000,196
*A;-100,-4
Fandy10
T4
MCM
*A;1316,-67
Fandy10
T2
MCM
*A;500,-304
Fandy10
T3
MCM
*J;850,396
G100
>25,0
*J;850,-54
G100
>25,0
*J;816,-667
G100
>25,0

\enddata{zip,272148332}
\view{zipview,272148332,31,0,198}
Figure 1: The Paper Path


\subsection{1.1	Why not electronic mail?

}
Other communication services developed at Athena such as \italic{discuss} 
[Raeburn1989], and \italic{Zephyr} [DellaFera1988] were not implemented as 
electronic mail because they required services that electronic mail did not 
provide.  (Instantaneous transmission in the case of \italic{Zephyr}, and 
central sequenced storage of messages in the case of \italic{discuss}.)  With 
\italic{turnin}, the primary issue was user interface. 


Professors wanted a user interface that more closely resembled the traditional 
"hand it in, mark it up, give it back" classroom process than existing 
exchange systems such as electronic mail and network filesystems did.


The service could be built on top of a network file system, the mailer, or any 
other available communication system as long as professors and students felt 
comfortable exchanging papers with it.  For example, they didn't want to deal 
with mail headers in papers.  In the simplest application, students would 
compose documents.  These documents would be annotated by the teachers.  The 
annotated documents would, probably, be re-used by the students for later 
drafts.


Some professors wanted to receive executable files to run rather than papers 
or program listings to read.  This imposed the constraint that the transport 
mechanism be able to exactly reconstitute the bits of the submission, but even 
this was not necessarily difficult to do with an appropriate user interface to 
the mailer.


We decided against using the mailer because it was not well suited to use as a 
file repository.  The Athena Post Office Service is based on the assumption 
that neither the mail hub nor the post office machines are used to store mail 
for long periods of time.  They are configured for relatively small amounts of 
storage that is constantly reused.


\subsection{1.2	The Student User Interface

}
Students were expected to use the UNIX timesharing host to do their work and 
exchange it with professors using these two commands:


\example{turnin problem_set file [file]

}
and


\example{pickup [problem_set]

}
The \typewriter{problem_set} argument was a string to name the problem set. 
 Often this would be specified by the teacher.  The file arguments could also 
be directories.  If \italic{pickup} were called with no argument or if the 
named problem set was not found, a list of existing problem sets to pickup was 
returned.


\subsection{1.3	The Teacher Non-interface

}
The only professors who used \italic{turnin} were UNIX cognoscenti or had 
teaching assistants who would do all the computer work for them.  One course 
only used \italic{turnin} as a way to collect assignments.  A TA would send 
the assignments to the line printer and take the printouts to the grading 
meeting.


To annotate files the teacher was expected to know the \italic{turnin} file 
hierarchy and to use UNIX commands to obtain the file, edit it, and save the 
changed file in a similarly structured pickup hierarchy.


Here is an example of what the file hierarchy might look like for a course, 
say, intro with two students jack and jill:


\example{intro/

    TURNIN/

        jack/

            first/

                README

                foo.c

            second/

                Makefile

                foo1.c

                foo2.c

        jill/

            ...

    PICKUP/

        jack/

            first/

                foo.errs

            second/

                a.out.errs

        jill/

            ...

}
Organizing papers this way posed a problem.  Most MIT professors are expert in 
their own fields, not in computers.  Many found the hierarchy difficult to 
navigate and not well matched to their methods of organizing student work. 
 This tended to make the teacher's job harder, while the goal of 
\italic{turnin} had been to make it easier.


\subsection{1.4	The Transport Mechanism

}
The first version of \italic{turnin} relied on a primative mechanism for 
transfering data.  Users of Berkeley UNIX may be familiar with the following 
command line to duplicate a hierarchy on a remote host:


\example{\smaller{tar cf - | rsh remote.host "(cd destination/directory; tar 
xpBf -)"

}}
On the timesharing host that was to receive papers, a special account called 
"grader" was created.  Instead of /bin/csh like everyone else, grader's login 
shell was \italic{grader_tar}.  This program relied on receiving as arguments:

\leftindent{
\symbola{7} a flag to determine if this was a turnin or a pickup

\symbola{7} the student's username

\symbola{7} the hostname of the machine the student was on

\symbola{7} a name for the problem set

\symbola{7} the absolute pathname of the student's working directory

\symbola{7} the name of the file or directory being transferred.

}
It used this information to locate the files to transfer, and to set the 
student's host as the remote.host to rsh to.  The \italic{turnin} program 
would \typewriter{rsh -l grader }passing it these arguments, and the 
\italic{grader_tar} program would rsh back to the host that initiated the 
\italic{turnin} to perform the transmission!


\subsection{1.5	Security

}
Care was taken to prevent unauthorized access to turned-in files.  The course 
\italic{turnin} directory was accessible only to members of a file protection 
group which was specially made for each course, and to the magic grader 
account.


The grader.tar program relied on rsh for security.  The \italic{turnin} 
program would modify a .rhosts file in the student's home directory to allow 
the grader.tar's rsh to succeed.  There was no global trusting among the 
timesharing hosts.


Probably the best enforcement of security came from the obscurity of the 
program.  It was hard for the installers and developers to retain a clear idea 
of how it worked.  This security through obscurity proved adequate for our 
prototype, but it was unacceptable for a \italic{turnin} service in wide use.


\subsection{1.6	Problems

}
The \italic{turnin} prototype was an interesting experiment in using the 
Athena timesharing hosts to exchange papers electronically, but as a service 
it left much to be desired.  It had problems in setup, maintainability, and 
usability.


The maintenance headaches came from teaching new people how to set up 
\italic{turnin}, and in controlling the amount of disk taken up by the course. 
 Setup required establishment of the grader account on the timesharing host, 
and installation of the user programs in course program libraries.  The 
location of the course \italic{turnin} directory had to be established and 
placed in a file along with the \italic{turnin} program in the course program 
libraries.   Athena User Accounts had to create a group for the graders, and 
keep it up to date.  Student user id's had to be known to the course 
timesharing host, even if the students were not allowed to log on to it.  Disk 
consumption had to be monitored by a person periodically running \italic{du} 
over the course directory.


Usability was the biggest problem.  A grader interface for those who were not 
UNIX literate was needed.  It had to help rather than hinder the organizing of 
student files.  The time delay in depositing files needed to be reduced. 
 Other activities closely related to collecting and returning papers could 
also be supported.


The real reason why \italic{turnin} version two came about, however, was the 
demise of the timesharing hosts, and the elimination of rsh as a transport 
mechanism.


\section{2	Version 2: Expanded Functionality

}
In spite of the problems with the user interface, \italic{turnin} acquired a 
small but loyal following of satisfied customers.  Athena decided to try and 
keep these customers when the timesharing model of computing was replaced with 
the distributed services model.  Our challenge as \italic{turnin} developers 
was to find a new file exchange mechanism not based on rsh that would work in 
the environment of non-secure workstations contacting secure service hosts.


The person assigned to do the new version of \italic{turnin} was concurrently 
working with the MIT writing faculty on another project.  He saw an 
opportunity to expand turnin; to market it to new users while at the same time 
completely re-implementing the old service.  This follows the great MIT 
tradition, "We can't solve that problem, but we can solve another much harder 
problem."


The MIT writing faculty had formed a group, the Committee on Writing 
Instruction and Computers (known as CWIC, pronounced "quick").  This group met 
weekly to discuss ways that computers, specifically those offered by Athena, 
could be applied to improve writing instruction at MIT.  This group came up 
with four basic activities of writing instruction they wanted the computer to 
support.  In a writing class, students and teachers:


\leftindent{\symbola{7} create texts

\symbola{7} exchange texts

\symbola{7} display text

\symbola{7} critique, annotate, and discuss texts

}
A specification, \italic{Electronic Classroom: Specification for a User 
Interface} [Barrett1987], was written based on the group's work.  The second 
and third versions of \italic{turnin} were based on this spec.  Starting from 
the principle of computer enhancement of common activities in class, six 
components were called for:


\leftindent{1. A \bold{Classroom Put and Get Program} to pass files between 
 students during class.


2. A \bold{Grade Sheet} interface for assignments to provide a simple method 
for an instructor to organize and correct student assignments.


3. A \bold{Syllabus} interface for handouts to organize these files in an easy 
to use format and to permit instructors to add or modify curricular files for 
in-class use.


4. A \bold{Turnin} interface for turning in and picking up assignments and 
handouts.  This interface simplifies current protocols for submitting 
assignments and picking up annotated papers or other class handouts.


5. An \bold{Electronic Textbook} facility that permits the storage of a set of 
files representing class notes, instructions and other reference material.


6. A \bold{Presentation Facility} to format files for display on a screen 
projection device,  (i. e. Show the file on the workstation screen in a big 
font so it will be legible when displayed in class with a screen projection 
system.)

}
Component number four represented a re-affirmation that the old \italic{turnin} 
would be useful.  The new version of \italic{turnin} would implement as 
services the new components one, two, and three as well as re-implementing 
number four.  The "Grade Sheet interface" of component two specified how 
 organizing student  papers would be improved for teachers not literate in 
UNIX.


The files managed by the new version of \italic{turnin} were organized into 
three classes:  


\leftindent{\symbola{7} exchangeables -- for component one, the in-class put 
and get facility

\symbola{7} gradeables -- for components one and four

\symbola{7} handouts -- for component three

}
The file exchange system was designed to support these and future classes of 
files so that user interfaces could be tailored to the kind of file being 
exchanged.  The whole system of six components, and the procedures and 
protocols for applying them in the course of writing instruction were 
collectively called EOS the \bold{E}ducational \bold{O}n Line \bold{S}ystem.


\subsection{2.1	Turnin on top of NFS

}
The spec was completed on 3 June 1987 and handed off to the development team. 
 The team consisted of  Maria Camblor, Bruce Lewis, and Rob Shaw with me as 
project manager.  The timesharing model of computation at Athena was to be 
replaced by the distributed services model of computation on 1 September 1987. 
 What sort of software could we offer as a robust implementation of the spec 
in three months, given that none of the team members had ever written a 
network service before?


It was initially unclear what sort of new transport mechanism was to be used 
in Athena's new distributed services environment.  We decided not to use the 
mail system for reasons described above.  Athena had recently deployed its 
\italic{discuss} service [Raeburn1989].  We opted not to use the discuss 
protocol because generating lists of student papers would take a long time, 
all the papers would be kept in one large file, and utilities to allow old 
style UNIX command oriented manipulation would be hard to write.


We decided to access the server through a client library (which we named FX.) 
 This would allow the same application programmers interface regardless of 
what transport mechanism we used.  We expected to throw our first server away. 
 We believed that the best way to offer the file exchange service was via a 
remote procedure call, much like the successful X server.  We studied the Sun 
Remote Procedure Call system and felt it was the right implementation scheme, 
but were concerned that it would take too long to write and test such a 
server.  As described below, we opted for a much simpler implementation 
strategy.


We agreed on the FX library calls by studying the spec and by designing the 
user programs.  While Maria Camblor and I set about designing the server and 
implementing the client library, Rob Shaw and Bruce Lewis wrote the student 
programs and the teacher programs respectively.  We documented our design for 
use by later developers [Camblor1988].


\subsection{2.2	The Clients

}
The student programs ended up resembling the original \italic{turnin} 
programs.  There were three major differences: Assignments were changed to be 
numbers rather than names.  Teachers asked to organize papers by class week 
number.  The course was specifiable by a command line argument and an 
environment variable.  New commands were added for the two new classes of 
files.  The student commands were:


\leftindent{\bold{put} - store a file in the in-class bin of files to exchange

\bold{get} - fetch a file from the in-class bin of files to exchange

\bold{take} - fetch a teacher created handout file

\bold{turnin} - deliver assignment file

\bold{pickup} - retrieve corrected assignment files

}
The student executed these programs from the shell when it was time to fetch 
or store a file.


The teacher program was started once and had its own command parser.  It 
enabled the teacher to create handouts, administer the class list, and to 
read, annotate, and return files.


There was a list of commands for each of the three functions:


grade:

\example{\smaller{list, l            list files turned in

whois, who         find a student's real name

display, show      display a file

annotate, ann      annotate a file

return, ret, r     return annotated file to student

editor             change or display current editor

purge, del, rm     remove turned-in file from bins

man, info          display information on a command

}}
hand:

\example{\smaller{list, l            list handouts

whatis, wha        show note for a handout

put, p             copy a file to a handout

note, n            add a note to a handout

take, get, t       copy a handout to a file

purge, del, rm     remove handouts

}}
admin:

\example{\smaller{add                add a name

del                delete a name

list, l            list all names in course

}}
The teacher would type the command and arguments.  At any time the teacher 
could type "?" and get a list of the commands and a reminder of what the 
arguments were, or use the info command for more detailed information.


The trickiest part of using the grader program was in specifying files.  If no 
files were specified, the program would assume that all were to be 
manipulated.  To restrict operation the teacher would give a file 
specification with four parts separated by commas as the argument:


1. assignment number (abbreviated as)

2. author user name (au)

3. version number (vs)

4. file name (fi)


So commands like list taking a file name would have a reminder like this:


\example{list [as,au,vs,fi}]


An empty field matched all, so 


\example{list 1,wdc,, 

}
would list all files turned in by user "wdc" for assignment 1.


The administrative commands were installed to enable teachers to establish a 
class list.  Only students in the class list were allowed to turn in  or 
exchange files.  The faculty found it inconvenient to maintain a class list on 
the computer, and the administrative commands were dropped from the grader 
program after a short amount of use.  The actual workings of access control 
was de-coupled from the class list as described below.


The important functions were display, annotate, and return.  The display 
command was used for showing files in class.  It would fetch the specified 
file from the server and use a settable display program to view it.  (e.g. 
\italic{more}, \italic{vi} or \italic{emacs})  In practice a special 
\italic{emacs} with a large font was used as the display program.  The 
annotate and return functions were used to bring the turned-in file into an 
editor such as \italic{emacs} and to return the modified file to the student. 
 These commands were smart enough to be able to fetch and store multiple 
files.


\subsection{2.3	The Server

}
We had insufficient time and experience to write a bona fide server.  Instead, 
the client library attached an NFS filesystem, and implemented all the client 
calls as file operations.  These NFS filesystems would be mounted when the 
application programs used the \typewriter{fx_open} call to begin, and 
unmounted when the \typewriter{fx_close} call was made, or when the program 
exited.  This operation is consistent with operation of a network service.


We planned to implement access control lists, but abandoned them too due to 
lack of time and experience.  Jon Rochlis looked at the old \italic{turnin} 
hierarchy and suggested a way to use the standard UNIX file protection modes 
for access control.  The method relied on the newly developed group access 
authentication that had been added as an Athena local change to NFS.


The NFS filesystems were organized as follows:


\leftindent{\symbola{7} Each course had its own NFS directory which was 
attachable by name.

\symbola{7} There was a subdirectory for each type of file: turnin, pickup 
handout, and exchange.

\symbola{7} Each of these directories was group owned by a file protection 
group created specially for the course.

\symbola{7} All of the graders were in this group, and no student taking the 
course was.

\symbola{7} The exchange directory was world readable and writable

\symbola{7} The handouts directory was grader writable and world readable

\symbola{7} The \italic{turnin} and \italic{pickup} directories were not world 
readable, but were world searchable and world writable.

\symbola{7} The first time a student ran \italic{turnin}, a directory owned by 
him or her, inheriting the group ownership, but inaccessible to the rest of 
the world, would be created in the \italic{turnin} and \italic{pickup} 
directories

\symbola{7} All turned in files and files to be picked up would live in the 
student owned subdirectories.

\symbola{7} We used the 4.3bsd "sticky bit hack" to restrict file deletion to 
directory owners, even when the directory is labeled writable.  Students could 
add themselves to the course but could not delete themselves or anyone else.

}
This had the effect that students could not find out who else's files were on 
the server, they could only write files into the \italic{turnin} directory, 
and would have trouble finding them to modify.  They certainly could not read 
or modify other students files.  The graders had free access to all the files. 
 By attaching the course directory by hand, it was possible to create bogus 
\italic{turnin} directories potentially locking out students.  But the 
perpetrator would own the directories and could be traced.


The file hierarchy looked like this (for a single student, wdc):


\example{\smaller{total 4

-r--r--r--  1 jfc      coop        0 Aug  9  1988 EVERYONE

-rw-r--r--  1 jfc      coop        0 Aug  9  1988 List

drwxrwxrwt  2 jfc      coop      512 Aug  9  1988 exchange

drwxrwxr-t  2 jfc      coop      512 Jan 11  1989 handout

drwxrwx-wt  3 jfc      coop      512 Aug 13  1988 pickup

drwxrwx-wt  3 jfc      coop      512 Aug  9  1988 turnin


exchange:

total 0


handout:

total 23

-rw-rw-r--  1 wdc      coop      559 Jan 11  1989 1,wdc,0,avl.h


pickup:

total 1

drwxrwx---  2 wdc      coop      512 Jan 11  1989 wdc


pickup/wdc:

total 16

-rw-rw-rw-  1 wdc      coop     1474 Aug 15  1988 1,wdc,0,bond.fnd


turnin:

total 1

drwxrwx---  2 wdc      coop      512 Jan 11  1989 wdc


turnin/wdc:

total 16

-rw-rw----  1 wdc      coop     1474 Aug 15  1988 1,wdc,0,bond.fnd


}}

The class list (later abandoned) was kept in the file List.  The existence of 
a file named EVERYONE signified that access was unrestricted.  The owner of 
EVERYONE had to match the owner of the directory it was found in (to prevent 
just anyone from setting EVERYONE).


Using the clever NFS access modes, we wrote the server and  FX client library 
in two weeks.


We met the user level spec with command line oriented programs: the familiar 
\italic{turnin} and \italic{pickup}. We added put and get for in-class  file 
exchange, and \italic{take} for teacher created handouts.  Our crowning 
achievement was \italic{grade}, a command oriented subsystem for finding new 
papers bringing them into an editor, and then returning modified papers.


\subsection{2.4	Problems  

}
This version successfully addressed the problem of usability.  The teacher 
input from CWIC enabled us to provide a better user interface, and enhanced 
functionality.  Retaining the old hierarchy allowed teachers who were 
comfortable with UNIX to grade as they had in the past, by attaching the NFS 
course directory manually.  The major usability problem remaining was the long 
time it took to generate lists of files.  Since the files were spread across 
several directories, the FX library did the equivalent of a \italic{find} to 
locate all the new files.  The \italic{turnin} suite of programs were, for the 
most part, simple, but could have been better integrated into the flow of the 
classroom.  Typing commands could perhaps have been replaced by clicking the 
mouse.


The problems of setup and maintainability persisted.  Controlling disk use 
became much more of a problem.  The new problem of reliability arose: There 
was no graceful degradation of service in the face of NFS server failure. 
 Disk usage had to be either monitored carefully, or had to have a lot of 
slack.  If one student turned in enough to consume all the disk space, all 
courses using that NFS partition for \italic{turnin} would be denied service. 
 


Since the \italic{turnin} file repository was a single directory hierarchy 
manipulated directly by the FX library, there was no mechanism for having 
secondary storage places if the course directory could not be written into. 
 Even if secondary storage was available, no thought was given to merging 
primary and secondary storage places, nor to being able to tell when all 
storage places were accessible.  If the one NFS directory was full, or if the 
particular server was down, that entire course was denied \italic{turnin} 
service.


The \italic{turnin} service put a strain on the Athena operations staff.  The 
staff was only funded 9AM to 5 PM five days a week.  Students would turn 
papers in 24 hours a day, seven days a week.  If the NFS server went down, no 
paper could be turned in.  In order for all courses to perceive \italic{turnin} 
service to be working, \italic{all} NFS servers holding \italic{turnin} 
directories had to be working.


The reliability of the NFS based \italic{turnin} system became difficult to 
maintain near the end of every term when the entire Athena system received its 
heaviest load.  The \italic{turnin} servers became heavily used with students 
turning in final papers, filling up the course directories when the operations 
staff is spread thin keeping the whole system up.


Our NFS servers used the Berkeley 4.3bsd quota system used to monitor disk 
consumption.  This implementation of quota clashed with the mechanisms 
\italic{turnin} used for access control.  Since quota was by userid and since 
access was controlled by having students own their turned in files, quota 
would have to be set for each individual student.  Professors found it 
 onerous to use the grader tools to keep an on-line class list.  Having to 
continuously advise Athena User Accounts of changes in the class was out of 
the question.


Creating a default quota for all students on a particular server would not 
have helped much.  It would have been difficult to come up with a default 
number of disk blocks to allocate because some students were in more than one 
course, and some courses required bigger files than others.  Although it would 
have solved the one failure mode mentioned above of one student denying 
\italic{turnin} service, other modes of failure occurred more often.  We never 
observed one student turning in a large block of files, but we often observed 
professors saving all student papers over a term and running the disk out of 
space.


Until some mechanism of group quota or  access control by list rather than 
owner were developed,  quota was disabled for course directories that used 
\italic{turnin}.  Someone on the Athena staff was assigned to watch over the 
disk usage.


We worked around disk space problems by spreading out course directories among 
several NFS servers, dedicating large partitions to the non-quota directories, 
and having one person spend a lot of time watching the disk usage.  We tried 
to limit course directories to 50 meg in a term, and to keep in contact with 
professors so that they could delete files before space became a problem.


\section{3	Version 3: The Network Service

}
Whereas no more than 3 courses used the first version of \italic{turnin}, a 
dozen used the second version and more were expected in the future.  The 
service was proving useful and was expected to become popular.  This meant 
that something had to be done to solve the operational problems.  This 
stand-alone version was written by Rob French.  Bruce Lewis, Clifford Tse, and 
I  contributed.


The new version had to retain or improve upon the previous version's 
functionality, security, and speed.  For example, several courses were 
exchanging files in class in real time, and collecting handouts at the 
beginning of class.  This real-time performance had to be retained.


The new version had to allow for easier server management. It had to allow:


\leftindent{\symbola{7} simpler setup.

\symbola{7} automated monitoring, and control of disk space usage through some 
quota mechanism.

\symbola{7} graceful degradation rather than total denial of service in the 
face of server failures.

}
We proposed to write a new back end for the FX client library that would meet 
these requirements.


\leftindent{\symbola{7} It was a true client/server model of service.

\symbola{7} It was layered on top of the Sun remote procedure call protocol.

\symbola{7} It contained its own access control list system.

\symbola{7} Files were owned by the server daemon userid.

}
\subsection{3.1	The Server

}
The Sun Remote Procedure Call protocol was a commonly available mechanism for 
implementing a network service.  Other protocols such as the Apollo Remote 
Procedure Call protocol could have been used.  We chose Sun RPC because it was 
available, Rob had experience with it, and it seemed that its use was becoming 
more widespread.


The access control lists are maintained in a database under the control of the 
server.  Previously, access control relied on the Athena method of creating 
credentials files which were updated nightly on all NFS servers.  Intervention 
of Athena User Accounts and a significant time delay were required to offer 
\italic{turnin} service to new courses, or to modify the list of qualified 
graders.


With the \italic{turnin} server taking direct responsibility for access 
control, changes are made through simple applications, and take effect almost 
instantaneously.  The head TA of a course can now add new graders.  He or she 
needs no other special privileges or training.  A new course can be created 
and used right away.


Having the server daemon own all the files is not a very good solution.  If 
each course is arranged as a separate partition or volume, a quota for the 
daemon userid can be established.  It would be a simple matter to make the 
server run setuid root and to be able to set the file ownership to a 
particular userid for quota purposes.  Perhaps the best solution is to add 
quota management to the access control lists so that the quota establishment, 
too, can be an instantaneous process divorced from Athena User Accounts.


We made the following additional changes:


\leftindent{\symbola{7} A database now stores the list of files along with 
their various attributes such as  author, assignment number, and timestamp.

\symbola{7} The server database remembers identities of files on other 
servers.

\symbola{7} Servers cooperate and keep replicated copies of a common database

}
Taking advantage of our experience, we changed the FX library a bit.  Instead 
of storing an integer version number for the file, a hostname and timestamp 
were associated with it.  This simplified establishing a version identity in 
an network of cooperating servers.  Lists of files were returned as handles on 
linked lists rather than simple linked lists to ease storage management and 
passing of data over the network.  We documented our new client library 
[Lewis1989].


The basic operations were retained:


\leftindent{\symbola{7} send a file

\symbola{7} retrieve a file

\symbola{7} list files matching a template

\symbola{7} list access control list

\symbola{7} add to access control list

\symbola{7} delete from access control list.

}
The database is layered on \italic{ndbm}.  We rely on ndbm to allow an 
efficient scan of the entire database when we generate lists of files. 
 Although a sequential scan of an entire database is slow, it is always faster 
than a find over a filesystem with the same number of nodes.  So although this 
algorithm is slow, the perceived benefit is great.  If very large courses are 
to be supported, this simple approach to database management can be replaced 
with a relational database which would allow matching on the various file 
parameters.


The database records information on the host responsible for holding the file, 
and there is a multi-server configuration that enables an authoritative 
database to be elected, and then shared among cooperating servers.  The 
algorithms for electing and sharing are based on a simplification of the Ubik 
database system used in the Andrew Filesystem protection server.  


\subsection{3.2	The latest user interface

}
The original file exchange service used the GNU Emacs text editor with 
  additional commands for annotating and displaying texts.  The latest user 
interface integrates displaying, editing, formatting, exchanging, and 
annotating into two applications: \italic{eos} for the student, and 
\italic{grade} for the teacher.  The student application gets its name from 
the \bold{E}ducational \bold{O}nline \bold{S}ystem, the term coined for the 
suite of programs and protocols specified for supporting the classroom 
activities.  Here at last is one program, containing all the pieces, worthy of 
the name of the whole system.  The teacher program gets its name from the 
command oriented grader program of the previous version of \italic{turnin}.


These applications take advantage of the Andrew Toolkit (commonly called ATK) 
developed at Carnegie Mellon University [Palay1988].  ATK offers the following 
features which made it particularly useful in building \italic{grade} and 
\italic{eos}:


\leftindent{\symbola{7} simple object oriented programming paradigm with 
inheritance to enable development by extending existing toolkit objects

\symbola{7} graphical user interface management system building blocks to 
support development of point and click applications

\symbola{7} rich selection of objects

\symbola{7} available on the X tape

\symbola{7} multi-font text object designed to look to the user like Emacs

\symbola{7} dynamic object loader for small initial application size, and 
simple expansion as the user uses advanced capabilities

\symbola{7} rapid application prototyping system.

}
Nowadays many people are developing graphical applications.  Developing X 
based applications with object oriented toolkits has become de regueur. 
 Availability on the X tape allows more freedom than proprietary development 
platforms, and a rich selection of objects increases the likelihood that the 
developer can use existing toolkit code rather than writing new code.


The multi-font text object was crucial.  Virtually all multi-font text objects 
suitable for use as a stand alone text editor are extremely proprietary.  We 
have not seen any other that has a code size under 1Meg.  The ATK text editing 
objects are small, efficient, and extensible through the dynamic object 
loading system.  We like being able to offer users the ability to edit 
equations, spreadsheets, and line drawings in \italic{eos} without requiring 
all users to start up an \italic{eos} containing all those subsystems.  Until 
the time when students all run 12 MIP machines with 16 Meg of main memory, ATK 
offers an extremely attractive balance of size versus speed that no other 
toolkit has approached.


The original version of \italic{eos} was done by N. Hagan Heller for her S. B. 
thesis at MIT in the department of Computer Science and Engineering 
[Heller1989].  She used the \bold{A}TK \bold{D}evelopment \bold{E}nvironment 
\bold{W}orkbench (ADEW) to do her prototype.  The ADEW system allowed her to 
compose and modify her screen layout directly with a WYSIWYG interface. 
 Although we opted to re-implement her prototype in raw ATK toolkit calls, we 
could have used the ADEW code generator to build the application.  We chose 
not to use ADEW because of some restrictions that ADEW imposed which have, for 
the most part been removed.  Nick Williams, of Imperial College, University of 
London, visiting MIT for the summer re-implemented Hagan's design with 
assistance from me.  Nick's implementation is outlined in an EUUG talk 
[Williams1990].


The five student file exchange programs (\italic{turnin}, \italic{pickup}, 
\italic{put}, \italic{get}, and \italic{take}), the editor, GNU Emacs, and the 
formatter (which was most often not used because it interfered too much with 
annotating) were made into an ATK editor with buttons across the top.  Figure 
2 shows \italic{eos} with a typical short paper:


\begindata{raster,272362128}
2 0 58514 58514 0 0 504 405
bits 272362128 504 405
ZZZI |
ZZZI |
e2(2223)2232(22	23)222a(2226(22	23 |
c8(888b)88b8(88	8b)8898(888c(88	8f |
e2(2225)2252(22	25)221a(2236(22	27 |
c8(888f)88f8(88	8f)88f8(88bc(88	9f |
e2(aaab2a(aab2	(aaab2a)aa2a'aa	ae2a'aaab |
c9(555f85(55f8	(555f85(55f8d5	'557c95'557f |
e2(aab52a'aaab	52(aab52a(aa5a	2a'aad62a'aa97 |
c9(555f85(55f8	(555f85(55f8d5	'557c95'557f |
e2(aaab2a(aab2	(aaab2a)aa2a'aa	ae2a'aaab |
c9(555f85(55f8	(555f85(55f8d5	'557c95'557f |
e2(aab52a'aaab	52(aab52a(aa5a	2a'aad62a'aa97 |
c9(555f85(55f8	(555f85(55f8d5	'557c95'557f |
e2(aaab2a(aab2	(aaab2a)aa2a'aa	ae2a'aaab |
c9(555f85(55f8	(555f85(55f8d5	'557c95'557f |
e2(aab52a'aaab	52(aab52a(aa5a	2a'aad62a'aa97 |
c9(555f85(55f8	(555f85(55f8d5	'557c95'557f |
e2(aaab2a(aab2	(aaab2a)aa2a'aa	ae2a'aaab |
c9555f96556556	5d!555f85557f	95!5557"55f856	59!5556#555f85
 7f955575$55f8	d5555795575595	!557c95!55d755	75"557f |
e2aabfceaaeaae	ac!aab52aaaG"aa	ab2aaaab52aeba	!aaae!aab2aab5
 2abf!aab2$aa5a	2aaabfeaab2b"aa	d62a!aacb2ab2	"aa97 |
c95558e0556556	5d!555f85550c	15!5557"55f856	59!5556!557555
 5f8570155575$55	f8d55558655455	95!557c95!55d7	5575"557f |
e2aaba6ebceeae	acdaaaab2aaaac	b3bb6eab372aaa	b2aebaf3bab6bc
 eb7cf2ab2ab2b3	aeb72f3b!abca	aa2aaab28eb32d	af2aaaae2a!aa
 cb3eb36a!aaab |
c95559e67e6c56	5dfd555f85555d	759f7f577f9555	f857f999fd7e76
 6731995f857f75	9f7f999fd7e665	f8d5557556775f	9995557c95!55
 G7377f5!557f |
e2aabfcee6f8ae	acc6aab52aaaac	b3b8632b31aaab	52affa3b8cc6e3
 6b33a2b52abf1b	3331a3b8cc6eea	5a2aaab3eeb331	bb!aad62a!aaG
 !331a!aa97 |
c9555f96607956	5dd6555f85555d	75996757759555	f85619f99dd6!67
 75f55f85704e74	759f99dd67e5f8	d55575e677759f	95557c95!55c3
 7f7759!557f |
e2aab82eeaecae	acceaaab2aaaac	b3baeb2b33!aa	b2aebb9bacceeb
 6b32faab2ab2ae	b2b3b9baccee0a	aa2aaab26eb333	b82aaaae2a!aa
 cb30333a!aaab |
c9555956666d57	5dd6555f85555d	75996757759555	f85659999dd6!67
 75195f85755b!75	!99dd6655f8d5	555966777599!55	7c95!55d77577
 59!557f |
e2aabaaebee6ab	f8fcaab52aaaac	bfbaeb2b33aaab	52aebbfbac7eb6
 7f3dbab52abfb1	9f33bfbac7ef6a	5a2aaabfeff31f	bd!aad62a!aacb
 3b33f2!aa97 |
c95559565c6655	f1d9555f8555!5d	996757759555f8	5658ed9d365c3b
 5cf15f857fb58e	758ed9d363c5f8	d5554783b74d8f	15557c95!55d7
 5e7765!557f |
e2aaa2a8a088aa	02c2aaab2aaa!a0	228828022aaab2	a8a2g2080a080
 2002ab2a800220	82200208680aaa	2aaaa828g!202a	aaae2a!aa0820
 830a!aaab |
c9&55d5555f85	(55f8(555f85%55	5de555f8d5'55	7c95#5557"557f |
e2&aacaaab52a	'aaab52(aab52a	%aaa7caaa5a2a	'aad62a#aaab2a
 !aa97 |
c9&5515555f85	(55f8(555f85%55	501555f8d5'55	7c95#5554"557f |
e2(aaab2a(aab2	(aaab2a)aa2a'aa	ae2a'aaab |
c9(555f85(55f8	(555f85(55f8d5	'557c95'557f |
e2(aab52a'aaab	52(aab52a(aa5a	2a'aad62a'aa97 |
c9(555f85(55f8	(555f85(55f8d5	'557c95'557f |
e2(aaab2a(aab2	(aaab2a)aa2a'aa	ae2a'aaab |
c9(555f85(55f8	(555f85(55f8d5	'557c95'557f |
e2(aab52a'aaab	52(aab52a(aa5a	2a'aad62a'aa97 |
c9(555f85(55f8	(555f85(55f8d5	'557c95'557f |
e2(aaab2a(aab2	(aaab2a)aa2a'aa	ae2a'aaab |
cbP8fOf8P8fOf8	OfcbfO |
e5)5535(5553)55	35(555a(5556(55	57 |
cfPbfOfbPbfOf9	OfcP |
ea(aaab2a(aab2	(aaab2a/aa"aa	ae(aaab |
ZZZI |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zh03Gc03fg3f	h0fGg0c30zl03 |
c0zh03Gc0Gc0G	c0g0fGg0c3060	zk03 |
c0zh03g01e1e0	!c0g0ch0c3060	zk03 |
c0zh03g038071	8060g0ch0cg60	zk03 |
c0zh03g03g3180	60g0ch0cg60zk	03 |
c0zh03g07g3980	01800cg03cc31	f83e0670zh03 |
c0zh03g06g18c0	01800cg07fc31	f87f06f0zh03 |
c0zh03g06g18f8	01800cg0e3c30	60e387c0zh03 |
c0zh03G86g183f	h0ffe0c1c3060	c18780zh03 |
c0zh03G86g1807	c0g0ffe180c30	6180c7zi03 |
c0zh03g06g18g	e0g0cg180c3061	80c6zi03 |
c0zh03g06g18g	60g0cg180c3061	80c6zi03 |
c0zh03g06g18g	30g0cg180c3061	80c6zi03 |
c0zh03g07g3980	30g0cg180c3061	80c6zi03 |
c0zh03g03g3180	30g0cg180c3061	80c6zi03 |
c0zh03g038070	c030g0cg0c1c30	60c186zi03 |
c0zh03g01e1!e0	61800cg0e3c30	60e386zi03 |
c0zh03Gc0Gc07f	e1800fG07fc30	787f06zi03 |
c0zh03Gc03fg1f	81800fG03cc30	383e06zi03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
ZZZI |
e22224zzy03 |
c0g04zzy03 |
c8888czzy03 |
c0g04zzy03 |
e22224zzy03 |
c0g04zzy03 |
c8888cn3fh20g	07h3ci02h08zu	03 |
c0g04n1180g20	g0ch66i02h08zu	03 |
e22224n1080i08	h42k01zv03 |
c0g04n118e7763	9c1f72e0815cf9	!c67ce3d8e6c0	zs03 |
c8888cn1f1122	24a208d9a08135	!23624d9109b3	60zs03 |
c0g04n161f2226	3e0889g812110	62220831091220	zs03 |
e22224n121014	23200889g8121	91a22210d10912	20zs03 |
c8888cn11101c	21a00889g4220	e2!2221110912	20zs03 |
e22224n119908	24b208d9g6620	83!22659109b2	20zs03 |
c8888cn38ce08	771c1e73813c70	f1d7777ce8dce7	70zs03 |
Hfcu03800108zz	03 |
e0g0cu07c00198	zz03 |
e0g0cu0fe0gf0	zz03 |
e0g0cu0ee0zzh	03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0fe0czzy03 |
e0fe0czzy03 |
e0fe0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0ch1cw08l04	018003j1ch0180	o08j08j03 |
e0g0ch08w08l04	g8001j30i80o08	j08j03 |
e0g0ch08k02r80	i08i8001j20i80	y03 |
e0g0ch09b005ce	38e6c780ee71c5	ceg38e6dc6c71	d9e7gdb871e72
 ec708e0161c773	807dcccd878036	e1c6c7700cc738	e019b003b9c5d8
 e66380g03 |
e0g0ch08d80351	651362g448b23	52g65b36636da	4888806ccc8889
 a4c89201b32224	40236446cc801b	33236220044945	2008d801132349
 b22480g03 |
e0g0ch0888021f	41f222g44f862	18g4112!228b08	8f80444188f904
 189801106227c0	22244448801110	622220044c7d80	08880110620912
 26h03 |
e0g0ch08880210	410222g2881a2	0cg4112!2289!88	g444688810468
 8c0111a144g22	24444880!11a2	2140044640c008	88ga1a2091223
 h03 |
e0g0ch08880210	410222g388222	06g4112!2288c8	88g4448888104
 8886011221c4g	22244448801112	2221c004434060	0888ge2220912
 2180g03 |
e0g0ch08880219	659222g10cb22	124065b22236da	488c80444c88c9
 04c89201132086	402366c44d8011	1322208006c965	200888g432209
 b36480g03 |
e0g0ch1ddc070e	38e771801071d7	1c4038e7772c73	9c67geee74673
 8e75dc03b9d083	8079c36ee6403b	b9d77080036e39	c01ddcg41d71c
 e1b7h03 |
e0g0cp20i40i20	zj01u03 |
e0g0cpa0i80i20	zj05u03 |
e0g0cpc0m70zj	06u03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0ch10g60h02	i18j10e7k060c	4018i02gc0j60	g40g60c0g0e70
 o01i03 |
e0g0ch10g20h02	i08j118ck0204	4008i02g40j20	g40g2040g0420
 o01i03 |
e0g0cj20g10j08	i020108k0204g	!08j!40i20i20	40g0420n10j03 |
e0g0ch3361e663	bd7638e1ddcb0e	5ce077b3Gd871	ce0e361e04c7cb
 1e1ddce63e58f0	717381e38ecb9c	2c47g04239ddc	e77397g71cbbc
 e336h03 |
e0g0ch11b32224	90d24520888d91	35109211086c8a	52191b3204490d
 88088912486c40	c8d443245246b2	36488007e6c889	12244dgca26!91
 1bh03 |
e0g0ch11122226	10827d80!889f	21f0c2110844fb	180311220448!88
 0889f2!444018	87c227d8440622	4f8004244889f2	27c8g83e41031
 11h03 |
e0g0ch11122223	108240c0550890	21g6211084481	8c0d1122044c!88
 05510264444068	8402240c441a22	48g0424455101	4408g820410d1
 11h03 |
e0g0ch11122221	90824060770890	21g3211084480	c6!1122044708
 88077102384440	888402240644!22	48g0424477101	c408g8204"11h
 03 |
e0g0ch11136364	90826520220899	219092110844ca	52191136044408
 88022192204440	c8864366524432	264c900426c221	90864820cb2411
 9111h03 |
e0g0ch3bb991b7	0dc739c0221dce	70e0e1bbdeee73	9c0ebb990ee79d
 c60220e73cee30	75c381939cee1d	3ce7100e738220	e0839c2071ce0c
 ebbb80g03 |
e0g0czk0840j42	y20m03 |
e0g0czk0cc0j66	y40m03 |
e0g0czk0780j3c	zm03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0cj060ck20	i60o10l100601	g0401h18k03n03	80h03 |
e0g0cj0204k20	i20o10l100201	g0401h08k01n01	i03 |
e0g0cj0204o20	o01j20h02l0804	j21k08h01i03 |
e0g0ch365ce2c4	736e1c0717639c	07772c39b007g	71cdb8d8e3b3ce
 036e1c79cbb1c2	031c0c73361c78	0f38071b0e7961	cb81b1c5deh01
 36h03 |
e0g0ch1b35b364	89b3240c8d24a2	02223644d80c80	cb66cc6db49111
 01b33222269322	012404d91b22c8	046c0c8d9b21b2	2680db2348h01
 1bh03 |
e0g0ch11211224	f911300188263e	02!227c880180	8224444516111f
 01110623e41062	01300489113e88	04440188912113	e4g886208h0111
 h03 |
e0g0ch11211224	81111806882320	01542240880680	82244445131110
 01111a220411a2	01180489112088	04440688912112	04g89a208h0111
 h03 |
e0g0ch11211224	81110c088821a0	01dc2240880880	82244445119110
 0111!22041222	010c0489112088	04440888912112	04g8a2208h0111
 h03 |
e0g0ch1b21b264	c911240c8824b2	g882264880c80	cb64446db49119
 01113223241322	012404d91132d8	046c0c889b2113	24gdb220840g01
 11h03 |
e0g0ch1670e3ce	73bbb8075c771c	g887739dc0740	71ceee58e738ce
 03bb9d19ce39d7	03b80473bb9c64	0338075dce1bb9	cegb1d70640g03
 bb80g03 |
e0g0ch10z40r04	s80n03 |
e0g0ch10z40r14	s80n03 |
e0g0ch38ze0r18	r01c0n03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0ch30h3001	81g40i60h01l0c	k20j06g03g0708	j04h0180i0310
 h01c0g03 |
e0g0ch10h10g81	g40i20h01l04k	20j02g01g0c08	j04i80i0110h03
 h03 |
e0g0ch10h10g80	h04g0420o04g08	h04k42g01g08k	80h1080i!01h02
 h03 |
e0g0ch1639b0f1	c7831ccd8f380f	2c3973831c361c	1b0e6c3c71debb
 31cf6773836e1c	f2c38f039f19b0	ed8e39ecd87c3c	b0e03d98e133dd
 c0e7c0g03 |
e0g0ch1b6cd992	2c813646c44804	3644d441241b36	0d9b36648a4869
 1324222441b322	4366d906c808d9	26d164846c9010	d9106489911108
 81b2h03 |
e0g0ch11448913	e88122!446004	227c87c1301122	08912244fb0841
 12042227c1113e	42245104480889	845f4084448810	89f04488311108
 8112h03 |
e0g0ch11448912	088122!443004	22408401181122	08912244818841
 12042144011120	42245104480888	c450408444c810	89g4488d11105
 0112h03 |
e0g0ch11448912	088122!441804	224084010c1122	0891224480c841
 120421c4011120	42245104480888	64504084447010	89g4489!110701
 12h03 |
e0g0ch136c89b3	2d8136!444904	22648641241136	089b226cca4841
 b3242086411132	4226db06c80889	26d96484444010	89906cd9911102
 01b2h03 |
e0g0ch1e39dcc9	c6411ceee37103	7739c383b83b9c	1dce77327386e0
 d9c370!83bb9c	37738c839e1ddd	c58e386eee780d	dce0346cebb8c2
 ge780g03 |
e0g0cm01i01zo	04j84i04i04j03 |
e0g0cm05i02zo	04jcci04i14j03 |
e0g0cm06zs0ej	78i0ei18j03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0ch0180gc0	hc0ge010l0180	j18g0380m06n62	h26h20h80g0ci
 03 |
e0g0ci80g40h40	g4010m80j08g06	n02n22h22h20h	80g04i03 |
e0g0ch1080g40	h40g40g01l80i	0108g04h04k02	j80i2001g02g04
 k84i03 |
e0g0ch3cb0e058	e6c3c0g473363	ce1b70e3b838b0	e361f383cb0e0f
 dce1cf665ce0db	871e381cb81deb	9c7381e63bd762	cccf639b019b01
 e587h03 |
e0g0ch10d9106d	b36640g4d91b1	120d99911064d9	91b244410d9104
 3593242235106c	cdb24436682486	a2948322490d23	644426cd808d80
 86c880g03 |
e0g0ch1089f045	122440g489111	18088831104088	311227c1089f04
 2032042221f044	48a27c22403084	3ec60222610822	24442448808880
 844f80g03 |
e0g0ch1089g45	122440g489111	0c0888d0a04088	d1132401089004
 20d2042221g44	48a24022401884	20630222310822	24442448808880
 8448h03 |
e0g0ch1089g45	122440g489111	06088910e04089	!11c401089004
 2112042221g44	48a24022400c84	20318222190822	24442448808880
 8448h03 |
e0g0ch1089904d	b226c4024d9111	12088990406489	91110641089904
 21932436219044	4db66436402484	32948362490822	66c426c8808880
 844c80g03 |
e0g0ch0ddce078	e7732403873bb8	dc1ddce84039dc	ebb9e380ddce0f
 70e9c31b70e0ee	e719381ce0386e	1ce7019770dc73	c363739dc1ddc0
 6ee7h03 |
e0g0cw80i0210	zv03 |
e0g0cv0280i03	30zv03 |
e0g0cv03j01e0	zv03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0cl01g60g03	8040k0180n0183	n!70m03h0310m	03 |
e0g0cl01g20g01	g40l80o81n!c0	m01h0110m03 |
e0g0cj02i20g01	h04k80j40h20g	81n!80g40k01h	01n03 |
e0g0ch36e1c79c	bb1c2380011ccd	8f386dc38ee0b1	c0e39b0ef5d98e
 79c7816770db87	1c6c3839f1f70e	f39b0e5ce0e5c1	639b0f3361f0k
 03 |
e0g0ch1b33!22	69322480013646	c44836664440da	2196cd92434899
 222c81b2206cc8	b236486c808c92	444d913521b341	b6cd9911b240k
 03 |
e0g0ch1110623e	410626g0122!44	602220c4408be1	04489842089023
 e8811220444f86	22604480819847	c89f2181120114	4891111220k03 |
e0g0ch!11a220	411a23g0122!44	30222342808a01	04488c42089022
 0881114044481a	22304480868c44	089020c1120114	4891111320k03 |
e0g0ch11122220	412221800122!44	18222443808a01	04488642089022
 088111c04448!22	18448088864408	90206112011448	91!11c0k03 |
e0g0ch11132232	413224900936!44	48222641g9b21	96c892420d9923
 2d813080444cb2	22486c808c9246	4899!21b20136	c89b!1102k03 |
e0g0ch3bb9d19c	e39d77100e1cee	e3707773a1gf1	c0e39ddc3706ce
 19c641e080eee7	1d777039e1e75c	339dce71c0e701	e39dccbbb9e2k
 03 |
e0g0cw02r01zg	0210k03 |
e0g0cw0ar05zg	0330k03 |
e0g0cw0cr06zg	01e0k03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0ch01i08j30	60l40h60g0203	j30h20g300el08	g06g01!8030n03 |
e0g0ch01i08j10	20l40h20g0201	j10h20g1018l08	g02h!8010n03 |
e0g0ch0280m10	20m08g20h21j10	j!10g08l42h80	g10i80j03 |
e0g0ch0280db87	18e5c1b2e71623	9b700e1ce71cc7	1e71e077767960
 36e1c7161c6c63	8e103ee1de7361	cb9c18e0f2c380	b18f961cb81deb
 9c7380g03 |
e0g0ch04406ccc	89b340d9ad9b24	4d9819252db24c	888b20!2221b0
 1b322c9b323626	591011924889b2	26a40920436440	d8921b22682486
 a29480g03 |
e0g0ch04404441	8912g89089127	c888033188a041	88fa20!222110
 1113e811062224	03!103308f913	e43009804227c0	8891113e403084
 3ec6h03 |
e0g0ch07c04446	8912g89089124	08880d18c8a046	88822015422110
 111208111a2224	0d!10d1888112	041808c04224g	88991120401884
 2063h03 |
e0g0ch08204448	8912g89089124	0888110c68a048	8882201dc22110
 11120811!2224	11101110c88112	040c08604224g	888e1120400c84
 203180g03 |
e0g0ch0820444c	89b2gd90d9326	488819252db24c	88cb6008822110
 11132c91322226	5910119248c913	!240920422640	!881132402484
 329480g03 |
e0g0ch1c70eee7	48e7gb3871e73	9ddc0eb9c71ce7	46719008871bb8
 3bb9c73b9d7773	8eb83ceb8673b9	ce381dc0377381	ddcf3b9ce0386e
 1ce7h03 |
e0g0cl08h80zy	1080n03 |
e0g0cl28h80zy	1980n03 |
e0g0cl30g01c0	zy0fo03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0cp20l03j18	h600180g0c0133	g18g70h38i04k	03838003h02g03
 h03 |
e0g0cp20l01j08	h20g80g040111	g08gc0h60i04k	0183g01h02g01
 h03 |
e0g0cm10g04m01	h200108h20g80	g04g11g08g80h	40g20m0145g01
 j01h03 |
e0g0ch1c7361c7	363d738f639bg	0e38cc738fg1c	7803cb0eg2c38
 8eg3cbb111c78	01f72egfb8779	cd8cd87ci0145	1c7161!c638e1
 h03 |
e0g0ch32d9b328	9b10d64426cd80	1964449459g32	20010d91g366c
 91g64691122c8	g8d9ag46492226	c46c90i016d22	c9b323626591h
 03 |
e0g0ch2089120f	911080c4244880	100c44c7d1g06	2001089fg2244
 9fg4441113e88	g8890g40cc23e4	!4488i01293e81	1062224031h03 |
e0g0ch20891208	11108344244880	1034446411g1a	20010890g2244
 90g4441112088	g8890g43462204	!44c8i01292081	11a22240d1h03 |
e0g0ch20891208	11108444244880	10!443411g2220	010890g224490
 g4441112088g88	90g44432204!44	70i0139208112	!224111h03 |
e0g0ch32d9132c	9110864426c880	19646c965bg32	20010899g226c
 99g6c411132d8	g8d90g46492324	!444080h011132	c913!226591h03 |
e0g0ch1c73b9c7	3b8dc3a3739dc0	0e3a36e38c801d	18gddceg7739ce
 g32e3bb9c6401	e738gf3ae19ce	!ee7880h03939c	73b9d77738eb80
 g03 |
e0g0czzj84t03 |
e0g0czzjcct03 |
e0g0czzj78t03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0ch0ey3060	i60i08h7f60l18	g0180g20k18h03	h03 |
e0g0ch18y1020	i20i08h4920l08	h80g20k08h01h	03 |
e0g0ch10g08q40	k1020i20l4920	l08h80k02g08h	01h03 |
e0g0ch3ee1de73	61cb9c0e2e701c	70eee0f380e1ce	736e162380e361
 e05ce6c71970g	082c39dc0e38d8	0708e7gb1c066	c3b638e79c7807
 1b0fh03 |
e0g0ch11924889	b226a4191a8822	c9244046c19252	89b31b244191b3
 2035136c88d0g	0836448819646c	0c892d80da2023	649b459222c80c
 8d99h03 |
e0g0ch103308f9	13e4300310f83e	19844044403318	f9!1127c03112
 2021f2218880g	08227c88100c44	018988808be022	26117d023e8801
 8891h03 |
e0g0ch10d18881	1204180d108020	68c2804440d18c	81!1124gd11220
 2102268880g08	22405010344406	88c8808ag2223	11410220880688
 91h03 |
e0g0ch1110c881	12040c11108020	886380444110c6	81!1124011112
 202102288880g	0822407010!44	088868808ag22	21914102208808
 8891h03 |
e0g0ch119248c9	13!241910c832	c921g46c19252	c9111326419113
 6021936c8882g	08226420196444	0c892d809b2022	249b659232d80c
 889bh03 |
e0g0ch3ceb8673	b9ce380eb8701c	75c1g3380eb9c	73bb9e7380ebb9
 9070e2c75dc2g	1c7738200e3aee	075dc7gf1c0!77	1638e19c64075d
 cc80g03 |
e0g0ct02t02m40	q10o03 |
e0g0ct0at02l01	40q10o03 |
e0g0ct0ct07l01	80q38o03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0cq06200c18	h60h0180g0180	0cg8020j!70g60	h40g6001c0m06
 i0ci03 |
e0g0cq02200408	h20i80h8004g80	20j3060g20h40	g2003n02i04i03 |
e0g0cq02g0408	g0420i80h8004	i02i28a0g20j20	02g01l02i84i03 |
e0g0ch1c5ce00d	b872e7g5ce263	8588e00f2c38d8	gb1cd878e3c01
 8e66c79ch28a3	8e2c38d8c71c20	07dc3bce6c3973	801ce2773801e5
 87h03 |
e0g0ch32351006	ccd9a880351226	46c9100436646c	gdb66cc9164g9b
 236224h2da459	36646c4cb22002	3249113644d480	25b22244g86c8
 80g03 |
e0g0ch0621f004	44890f8021f220	c449f004220c44	g8a24489f44g91
 !2230h2527d022	0c444806200206	611f227c86g31	12227cg844f80
 g03 |
e0g0ch1a21g04	448908g210223	4449g04223444	g8a24489044g91
 !2218h25241022	3444481a20021a	3110224083g19	121440g8448h03 |
e0g0ch2221g04	448908g210224	4449g0422!44g	8a24489044g91
 !220ch27241022	!444822200222	1910224081800d	121c40g8448h03 |
e0g0ch32219004	44d90c80219226	44c99004226444	g9b644d996cg9b
 !222480g222659	2264444cb22002	32491922648480	25b20864g844c
 80g03 |
e0g0ch1d70e00e	ee7387g70e773	a79ce003773aee	gf1cee64e32g8e
 7771b880g7273	8e773aeee71d70	079d70ce7739c7	g38e70838g6ee7
 h03 |
e0g0czm80zq03 |
e0g0czl0280zq	03 |
e0g0czl03zr03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0cj060ci07	l20i0ci03j0c40	h0eg0401zh03 |
e0g0cj0204i0c	l20i04i01j0440	h18g0401zh03 |
e0g0cj0204i08	j02h02h04h2021	j!04h10j10z03 |
e0g0ch365ce2c4	736e039f199b0e	39779c66c7bb83	858e66787961c0
 f66384cf77073e	1c0c73363cz03 |
e0g0ch1b35b364	89b306c8088d99	44d23223621106	46db222021b221
 9226!44220d90	3204d91b10z03 |
e0g0ch11211224	f9110448088890	7c8206!2211gc4	5122202113e112
 20c44422089006	04891110z03 |
e0g0ch11211224	81110448088890	40821a!220a03	44512220211201
 1223!44140890	1a04891110z03 |
e0g0ch11211224	81110448088890	4082"220e0444	51222021120112
 24!441c089022	04891110z03 |
e0g0ch1b21b264	c91106c80d8899	648232!220406	44db3620211321
 b366!44080d90	3204d9111080y	03 |
e0g0ch1670e3ce	73bb839e06ddce	39c19d77718403	a78e1b181bb9c0
 d1b3aee308073c	1d0473bb8c80y	03 |
e0g0ch10u08n10	i10i04zi03 |
e0g0ch10u28n10	i50i14zi03 |
e0g0ch38u30n38	i60i18zi03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
Hfczzy03 |
e22224zzy03 |
c8888czzy03 |
e22224zzy03 |
c8888czzy03 |
e22224zzy03 |
c0g04zzy03 |
c8888czzy03 |
c0g04zzy03 |
e22224zzy03 |
c0g04zzy03 |
c8888czzy03 |
c0g04zzy03 |
e22224zzy03 |
c0g04zzy03 |
c8888czzy03 |
c0g04zzy03 |
ZZZI |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
ZZZI |
ZZZI |
\enddata{raster, 272362128}
\view{rasterview,272362128,32,0,0}
Figure 2: Screen dump of EOS student interface.


The teacher interface, \italic{grade}, looks just like the student interface 
except that the \italic{Turn In}  and \italic{Pick Up} buttons are replaced 
with \italic{Grade} and \italic{Return} buttons.


The \italic{Guide} button opens a window on an on-line style guide that is 
being experimented with by the writing teachers who use eos.  It replaces a 
GNU Emacs based on-line style guide that was too hard to use.  The new one 
uses hyper-link buttons to access a whole lattice of information.  The 
\italic{Help} button is used to start the ATK \italic{help} documentation 
browser.


When a student clicks \italic{Turnin}, a dialogue box pops up to get the 
filename and assignment number.  The student is also given the choice of 
turning in the contents of the main editor window, or a file.  In this way, 
users experienced with the old protocol of turning in a file will be able to 
use the new interface.


The \italic{Grade}, \italic{Handouts} and \italic{Exchange} buttons all pop up 
a new window that contains a list of papers to select, along with appropriate 
operations to perform on the selected papers.  For example, to annotate a 
paper turned in by a student, the teacher clicks the \italic{Grade} button and 
positions the "Papers to Grade" window.  Figure 3 shows a typical "Papers to 
Grade" window:


\begindata{raster,272128432}
2 0 58514 58514 0 0 504 254
bits 272128432 504 254
ZZZI |
ZZZI |
c0zzo+2223 |
c0zzo28*888f |
c0zzo+2227 |
c0zzo28*889f |
c0zzo22*aaab |
c0zzo29*557f |
c0p1ffcr01f8j	0ci0ch30q22*aa	97 |
c0p1ffeoc0h07	fej0ci0cg1830	q29*557f |
c0p1806oc0h!0f	j0ci0cg1830q22	*aaab |
c0p1803oc0h1c	03j0ci0cg1830	q29*557f |
c0p1803oc0h18	0180i0ci0cg18	30q22*aa97 |
c0p180307c0cf	g7819c7e003f0	7cg380183387c	03cc0781800cf0
 7e3060p29*557f |
c0p18030fe0G81	fe1bcff003f0fe	g30g0378fe07fc	1fe1800ff87e30
 e0p22*aaab |
c0p18061c70f1	c38e1f1c38gc1	c7g30g03e1c70e	3c38e1800f1c18
 31c0p29*557f |
c0p1ffe1830e0	c3031e!18gc183	g30g03c1830c1c	!30g0e0c183380
 p22*aa97 |
c0p1ff8g70c066	031c18hc30180	301fc38007180c	6030g0c061837
 q29*557f |
c0p18g03f0c066	03181ehc30180	301fc3g3f180c	6030g0c06183e
 q22*aaab |
c0p18g0ff0c067	G180fc0gc30180	30gc3gG180c7f	f0g0c06183cq29
 *557f |
c0p18g1e30c067	G1803f0gc30180	30gc301e3180c	7ff0g0c06183e
 q22aafab2bf2a	feabeabeafaa97 |
c0p18g3830c066	g18g38gc30180	38gc30383180c	60h0c061837q29
 55fe757fd57f97	f97f9fd57f |
c0p18g!30c066	g18g18gc30180	1801c3!03180c	60h0c06183380
 p22ab86b2b0ca	e1ae1ae1b8caab |
c0p18g3070e0c3	03"18gc183g1c	03c303070c1c!30	g0e0c1831c0p29
 5713!756564dc	4dc59d157f |
c0p18g38f0f1c3	87181c38gc1c7	g!0fc3038f0e3c	3871800f1c1830
 e0p22ab2b32b2	!eaccacca2faa	97 |
c0p18g1fb8G81	fe180ff0gf0fe	g07fec301fb87	fc1fe1800ff81e
 3070p29!57!75	!65dd5dd553d5	7f |
c0p18g0f18cfg	781807e0g707c	g01f8c3gf183cc	0781800cf00e!30
 p22ab2b32b2!ea	ccaccaa8eaab |
c0tc0zt29!57!75	!65dd5dd55965	7f |
c0tc0zt22a9ae	32b2caeb86b86b	bcea97 |
c0tc0zt2955fe	7fbfd57f97f97f	8fc57f |
c0tc0zt22aa78	!bf0afe29e29e	278aab |
c0tc0zt295501	40g55g54054050	157f |
c0zzo22*aa97 |
c0zzo29*557f |
c0zzo22*aaab |
c0zzo29*557f |
c0zzo22*aa97 |
ZZPe9*557f |
e22224zzm22*aa	ab |
c0g04zzm29*55	7f |
c8888czzm22*aa	97 |
c0g04c0g0310h	39c060g60g0188	g03h1f80i3fg70	h08g0bg18h2010
 0102g01l29*55	7f |
e2222440g0110	h108020g20h88	g01h08c0i1180	20h08g09g08h20
 100102g01l22*aa	ab |
c0g0440g01g!08	108020g20h8004	01h0840i108020	j11g08i080205
 m0829*557f |
c8888c5998f931	de08108e26c02c	cc7c98ef016770	08d76638e01180
 2039ddd8e01165	c8e77763880205	073b1f6c6dc39b	1e23*5557 |
c0g046c892112	48081f91236036	4490892401b220	0f8d2265101fg
 204488892021b3	49122224840408	894924!36644d	882bR |
e2222444891113	087f109f222022	44888984011220	08c82241f016g
 207c8889802112	09f22226!0408	8c61"2227c888	22*aaab |
c0g0444899111	88081090222022	44c888c4011140	08482241g12g20
 405508c0211209	015423!040f86	3132!22240888	2fR |
c8888c4488e110	c8081090222022	447088640111c0	08482241g11g21
 40770860211209	01dc2184041043	191c!22240888	3fR |
c0g044cd88112	48081099236026	6c408924013080	08c83665901180
 21642209202132	09908824840410	!4910!22264888	28*888b |
e22224f86cf3bb	86g39ce72c03c	3679ddc301e080	1f9c1b38e038c0
 7f38221dc011e7	1ce08877080238	ee739e!77739d	c6+2223 |
c8888dc00108k	02i84i01s10k08	02i21k28*888f |
e22227e00198k	02icci05s08k10	01i33k+2237 |
c8888ff0gf0k07	i78i06s08k1001	i1ek29*557f |
I70zzl22*aaab |
e0fe0czzm29*55	7f |
e0fe0c7880zzk	22*aa97 |
e0g0ccc80zzk29	*557f |
e0g0c8440zzk22	*aaab |
e0g0c0440zzk29	*557f |
e0g0c0820zzk22	*aa97 |
e0g0c1020zzk29	*557f |
e0g0c!20zzk22	*aaab |
e0g0c4020zzk29	*557f |
e0g0cc420zzk22	*aa97 |
e0g0cfc40zzk29	*557f |
e0g0cg40zzk22	*aaab |
e0g0cg80zzk29	5557f567e5f965	5d!75557f |
e0g0cg80zzk22	aaabfceff3fcea	acbaf2aa97 |
e0g0czzm295557	0d66358e655e59	65557f |
e0g0czzm22aaab	26ef03a6eabeac	caaaab |
e0g0czzm295557	5663e59e65735f	d5557f |
e0g0czzm22aaab	2ee8f3fceab327	8aaa97 |
e0g0czzm295557	566539f9657f93	15557f |
e0g0czzm22aaab	2eee9b82eaGab	2aaaab |
e0g0czzm295557	5c67799565e1d7	!557f |
e0g0czzm22aaab	fcebf3aaGcacb	2aaa97 |
e0g0czzm295557	f165e5957fd5d7	!557f |
e0g0czzm22aaa8	028a0a2a800a08	2aaaab |
e0g0czzm29*55	7f |
e0g0czzm22*aa	97 |
e0g0czzm29*55	7f |
e0g0czzm22*aa	ab |
e0g0czzm29*55	7f |
e0g0czzm22*aa	97 |
e0g0czzm29*55	7f |
e0g0c784078f1	e0c0g1f899807	a0j40g30040102	g01l0f20u22*aa
 ab |
e0g0cccc0cd9b	3040g08c8880c	60j40g10040102	g01l0820u29*55
 7f |
e0g0c8540850a	1040g08408808	200840h80g10!02	05m08!10u22*aa
 97 |
e0g0c0440850a	1059dc08d88810	271ef39dc09ddc	f1c20205073b1f
 6c6dc39b1e1c10	u29*557f |
e0g0c0840850a	106c880f!8810	0c884448810889	93210408894924
 !36644d880608	u22*aaab |
e0g0c1040850a	10448808c88810	018847c8810889	120104088c61"22
 27c8880308u29	R |
e0g0c2040850a	10445008488810	06884405010551	1201040f863132
 !222408880108	u21*5557 |
e0g0c!40850a10	44700848881828	88440701077112	01041043191c!22
 2408880108u2f	R |
e0g0cc442cd9b	304c2008c8880c	4c884642010221	b3210410!4910
 !222648881208	u2a*aaab |
e0g0cfdf278f1	e078201f9ddc07	87463382g8220	c9c20238ee739e
 !77739dc61c10	u3fR |
e0g0cl40m04g80	h!02i21l10u+22	23 |
e0g0ck0140m14	g40h0401i33l20	u28*888f |
e0g0ck0180m18	g40h0401i1el20	u+222b |
e0g0czzm28*88	9f |
e0g0czzm22*aa	97 |
e0g0czzm29*55	7f |
e0g0czzm22*aa	ab |
e0g0czzm29*55	7f |
e0g0czzm22*aa	97 |
e0g0czzm29*55	7f |
e0g0czzm22*aa	ab |
e0g0czzm29*55	7f |
e0g0czzm22*aa	97 |
e0g0czzm29*55	7f |
e0g0czzm22*aa	ab |
e0g0czzm29*55	7f |
e0g0czzm22*aa	97 |
e0g0czzm29*55	7f |
e0g0czzm22"aa	aff3f2eff2"aa	ab |
e0g0czzm29"55	57f7fd6ff5"55	7f |
e0g0ci3060g0f	c4cc03d0j20g18	02g81h80k0788	v22"aaae030ce1
 82"aa97 |
e0g0ci1020g04	64440630j20g08	02g81h80k0cc8	v29"5556575665
 95"557f |
e0g0ch!1020g04	204404100420h	40g08!010280l	040844v22"aaaf
 eb2eeb#aaab |
e0g0cdb873cf0	2cee046c440813	8f79cee04eee78	e10102839d8fb6
 36e1cd8f0cc4v	29"5557e75665	95"557f |
e0g0c6ccd9190	364407c4440806	442224408444c9	90820444a492!1b
 3226c40782v22	"aaae0b2eeb#aa	97 |
e0g0c44489110	224404644408g	c423e440844489	g8204463091!11
 13e4440cc2v29	"555657566595	"557f |
e0g0c44489110	22280424440803	4422028082a889	g8207c31899!11
 1204440842v22	"aaaeab2ceb#aa	ab |
e0g0c44489110	22380424440c14	4422038083b889	g8208218c8e!11
 1204440842v29	"5557f7fd6595	"557f |
e0g0c444d91b0	26100464440626	442321g8110d9	90820824a488!11
 1324440cc2v22	"aaaff3f0eb#aa	97 |
e0g0ceee70cc8	3c100fceee03c3	a319c1g411064	e1011c7739cf3b
 bbb9cee30784v	29"5550040504	15"557f |
e0g0ck20m02g40	h!01i1080k04v	22*aaab |
e0g0cka0m0ag20	h02g80h1980k08	v29*557f |
e0g0ckc0m0cg20	h02g80h0fl08v	22*aa97 |
e0g0czzm29*55	7f |
e0g0czzm22*aa	ab |
e0g0czzm29*55	7f |
e0g0czzm22*aa	97 |
e0g0czzm29*55	7f |
e0g0czzm22*aa	ab |
e0g0czzm29*55	7f |
e0g0czzm22*aa	97 |
e0g0czzm29*55	7f |
e0g0czzm22*aa	ab |
e0g0czzm2bR |
e0g0czzm25*55	57 |
e0g0czzm2fR |
e0g0czzm3fR |
e0g0czzm28*88	8b |
e0g0czzm+2227 |
e0g0czzm28*88	8f |
e0g0ch07k03h7e	26601e80i01hc0	100408g04l3c40	q+222b |
e0g0ch0ck01h23	22203180i01h40	100408g04l6640	q29*557f |
e0g0ch08k01h21	02!208021h02h	40!0814m204220	q22*aa97 |
e0g0cd9739f72	e7361c71c16770	236220409c7bce	77027773c7!08
 141cec7db1b70e	6c786620q29*55	7f |
e0g0c6cd44889	a89b328a41b220	3e222040322111	220422264c8410
 22252490d8d991	36203c10q22*aa	ab |
e0g0c4487c8f9	0f9120fb011220	2322204006211f	22042224480410
 223184"889f22	206610q29*557f |
e0g0c44840881	081120!811140	212220401a2110	14041544480410
 3e18c4c8!8890	22204210q22*aa	97 |
e0g0c44840881	08112080c111c0	21222060a22110	1c041dc4480410
 410c6470!8890	22204210q29*55	7f |
e0g0c6c8648c9	0c9132ca413080	23222031322119	08040886cc8410
 41252440!8899	22206610q22*aa	ab |
e0g0c59c39e73	873b9c7381e080	7e77701e1d18ce	0802088327!08
 e3b9ce79!ddce	77183c20q29*55	7f |
e0g0c40n01n10	02i!08i84l20q	22*aa97 |
e0g0c40n05n50	01i1004iccl40	q29*557f |
e0g0ce0n06n60	01i1004i78l40	q22*aaab |
e0g0czzm29*55	7f |
e0g0czzm22"aa	b2cfeff3f2"aa	97 |
e0g0czzm29"55	75dfe7f7f9"55	7f |
e0g0czzm22"aa	b38c0e031c"aa	ab |
e0g0czzm29"55	771d56574d"55	7f |
e0g0czzm22"aa	be2fcfeb3c"aa	97 |
e0g0czzm29"55	7e5fd7e7f9"55	7f |
e0g0czzm22"aa	b72c0e0bf2"aa	ab |
e0g0czzm29"55	739d565705"55	7f |
e0g0czzm22"aa	b1ccaeab2a"aa	97 |
e0g0czzm29"55	74efe7f7#557f |
e0g0czzm22"aa	b26feff32a"aa	ab |
e0g0czzm29"55	45h04#557f |
e0g0czzm22*aa	97 |
e0g0czzm29*55	7f |
e0g0czzm22*aa	ab |
e0g0czzm29*55	7f |
e0g0czzm22*aa	97 |
e0g0czzm29*55	7f |
e0g0czzm22*aa	ab |
e0g0czzm29*55	7f |
e0g0czzm22*aa	97 |
e0g0czzm29*55	7f |
e0g0czzm22*aa	ab |
e0g0czzm29R |
e0g0czzm21*55	57 |
e0g0czzm2fR |
e0g0czzm2a*aa	ab |
e0g0czzm3fR |
e0g0czzm+2223 |
e0g0czzm28*88	8f |
e0g0czzm+222b |
e0g0czzm28*88	9f |
e0g0czzm22*aa	97 |
e0g0czzm29*55	7f |
e0g0czzm22*aa	ab |
e0g0czzm29*55	7f |
e0g0czzm22*aa	97 |
e0g0czzm29*55	7f |
e0g0czzm22*aa	ab |
e0g0czzm29*55	7f |
e0g0czzm22*aa	97 |
e0g0czzm29*55	7f |
e0g0czzm22*aa	ab |
e0g0czzm29*55	7f |
e0g0czzm22*aa	97 |
e0g0czzm29"55	5d777f57f5"55	7f |
e0g0czzm22"aa	acb33fcff2"aa	ab |
e0g0czzm29"55	5d7770d605"55	7f |
e0g0czzm22"aa	acb3326e#aa97 |
e0g0czzm29"55	5ff77567e5"55	7f |
e0g0czzm22"aa	aff332efea"aa	ab |
e0g0czzm29"55	5c37756605"55	7f |
e0g0czzm22"aa	acb332ee#aa97 |
e0g0czzm29"55	5d7775c6#557f |
e0g0czzm22"aa	acb33fcff2"aa	ab |
Hfczzm29"555d	777f17f5"557f |
e22224zzm22"aa	a080g2802"aa97 |
c8888czzm29*55	7f |
e22224zzm22*aa	ab |
c8888czzm29*55	7f |
c8888czzm22*aa	97 |
c0g04zzm29*55	7f |
e22224zzm22*aa	ab |
c0g04zzm29*55	7f |
c8888czzm22*aa	97 |
c0g04zzm29*55	7f |
e22224zzm22*aa	ab |
c0g04zzm29*55	7f |
c8888czzm23*55	57 |
c0g04zzm2bR |
e22224zzm22*aa	ab |
c0g04zzm2fR |
ZZZI |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c7f6l08pc0zzh	03 |
c492l18p40zzh	03 |
c492l18k08j40	zzh03 |
c082c397381c5c	e0283638d8e5ce	1e703eb9c3c7zzh	03 |
c083644d443235	10481b646d1352	08d8486b264880	zzg03 |
c08227c87c0621	f048110c45f218	08884440644f80	zzg03 |
c0822408401a21	g88113445020c	08886441a448zzh	03 |
c0822408402221	gfc1144450206	088838422448zzh	03 |
c0822648643221	90081b646d9212	08d8204326cc80	zzg03 |
c1c7739c381d70	e008163a58e71c	06703ce1d327zzh	03 |
c0n10g40j42zzk	03 |
c0n10g40j66zzk	03 |
c0n38ge0j3czzk	03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
ZZZI |
ZZZI |
\enddata{raster, 272128432}
\view{rasterview,272128432,33,0,0}
Figure 3: Screen dump of "Papers to Grade" window


The teacher clicks on the desired paper and then clicks the \italic{Edit} 
button.  The file is fetched from the \italic{turnin} server into the main 
editor window of the grade program.  The teacher then marks up the document. 
 An object called \italic{note} was developed for annotation.  The ATK editor 
treats the \italic{note} like a large character with internal state.  When the 
\italic{note} is \bold{closed}, it appears as an icon of two little sheets of 
paper. When \bold{open}, the text of the annotation is displayed.  The user 
clicks on the icon to open the \italic{note}, and on the black region at the 
top of the \italic{note} to close it.  Athena users of the ATK based editors 
such as \italic{eos}, \italic{grade} and \italic{ez}, get the additional menu 
commands to create a new \italic{note}, and to open and close all notes.  When 
the teacher is finished modifying the file, he or she clicks the 
\italic{Return} button, and the file is sent back to the \italic{turnin} 
server for later \italic{Pick Up} by the student.  Figure 4 shows how a file 
with one open \italic{note}, and two closed \italic{notes} would look in a 
typical \italic{grade} editor window:


\begindata{raster,271271928}
2 0 58514 58514 0 0 504 504
bits 271271928 504 504
ZZZI |
ZZZI |
e2(2223)2232(22	23)222a(2226(22	23 |
c8(888b)88b8(88	8b)8898(888c(88	8f |
e2(2225)2252(22	25)221a(2236(22	27 |
c8(888f)88f8(88	8f)88f8(88bc(88	9f |
e2(aaab2a(aab2	(aaab2a)aa2a'aa	ae2a'aaab |
c9(555f85(55f8	(555f85(55f8d5	'557c95'557f |
e2(aab52a'aaab	52(aab52a(aa5a	2a'aad62a'aa97 |
c9(555f85(55f8	(555f85(55f8d5	'557c95'557f |
e2(aaab2a(aab2	(aaab2a)aa2a'aa	ae2a'aaab |
c9(555f85(55f8	(555f85(55f8d5	'557c95'557f |
e2(aab52a'aaab	52(aab52a(aa5a	2a'aad62a'aa97 |
c9(555f85(55f8	(555f85(55f8d5	'557c95'557f |
e2(aaab2a(aab2	(aaab2a)aa2a'aa	ae2a'aaab |
c9(555f85(55f8	(555f85(55f8d5	'557c95'557f |
e2(aab52a'aaab	52(aab52a(aa5a	2a'aad62a'aa97 |
c9(555f85(55f8	(555f85(55f8d5	'557c95'557f |
e2(aaab2a(aab2	(aaab2a)aa2a'aa	ae2a'aaab |
c9!555e!5557"55	5f85555f95%55	f85659!5556#55	5f857f955575$55
 f8d55557955755	95!557c95!55d7	5575"557f |
e2!aaG!aaab2a	!aab52aaabfca	ae#aaab52aeba	!aaae!aab2aab5
 2abf!aab2$aa5a	2aaabfeaab2b"aa	d62a!aacb2ab2	"aa97 |
c9!5561955557	"555f855558e5	56$55f85659!55	56!5575555f85
 70155575$55f8	d5555865545595	!557c95!55d755	75"557f |
e2!aaca3b3cbb	3e!aaab2aaaba	6bcfb3bb6e!aa	b2aebaf3bab6bc
 eb7cf2ab2ab2b3	aeb72f3b!abca	aa2aaab28eb32d	af2aaaae2a!aa
 cb3eb36a!aaab |
c9!55d55f667f	73!555f855559	e666359f7f!55	f857f999fd7e76
 6731995f857f75	9f7f999fd7e665	f8d5557556775f	9995557c95!55
 G7377f5!557f |
e2!aacfb80ee3	332aaab52aaabf	ceeeb3b8632aab	52affa3b8cc6e3
 6b33a2b52abf1b	3331a3b8cc6eea	5a2aaab3eeb331	bb!aad62a!aaG
 !331a!aa97 |
c9!55d7997e67	7f!555f85555f	97e6759967!55	f85619f99dd6!67
 75f55f85704e74	759f99dd67e5f8	d55575e677759f	95557c95!55c3
 7f7759!557f |
e2!aac9bae6eb	302aaaab2aaab9	ce0eb3baeb2aaa	b2aebb9bacceeb
 6b32faab2ab2ae	b2b3b9baccee0a	aa2aaab26eb333	b82aaaae2a!aa
 cb30333a!aaab |
c9!5565996667	75!555f855558	d656759967!55	f85659999dd6!67
 75195f85755b!75	!99dd6655f8d5	555966777599!55	7c95!55d77577
 59!557f |
e2!aaGbafebf3b	2aaab52aaabaef	6fbfbaeb2aab52	aebbfbac7eb67f
 3dbab52abfb19f	33bfbac7ef6a5a	2aaabfeff31fbd	!aad62a!aacb3b
 33f2!aa97 |
c9!551e193b5b	5e!555f855559	63c39d9967!55	f85658ed9d365c
 3b5cf15f857fb5	8e758ed9d363c5	f8d5554783b74d	8f15557c95!55
 d75e7765!557f |
e2!aaa0a280!20	!aaab2aaaa288	082022882aaab2	a8a2g2080a080
 2002ab2a800220	82200208680aaa	2aaaa828g!202a	aaae2a!aa0820
 830a!aaab |
c9(555f85(55f8	(555f85%555de5	55f8d5'557c95	#5557"557f |
e2(aab52a'aaab	52(aab52a%aaa7	caaa5a2a'aad6	2a#aaab2a!aa97 |
c9(555f85(55f8	(555f85%555015	55f8d5'557c95	#5554"557f |
e2(aaab2a(aab2	(aaab2a)aa2a'aa	ae2a'aaab |
c9(555f85(55f8	(555f85(55f8d5	'557c95'557f |
e2(aab52a'aaab	52(aab52a(aa5a	2a'aad62a'aa97 |
c9(555f85(55f8	(555f85(55f8d5	'557c95'557f |
e2(aaab2a(aab2	(aaab2a)aa2a'aa	ae2a'aaab |
c9(555f85(55f8	(555f85(55f8d5	'557c95'557f |
e2(aab52a'aaab	52(aab52a(aa5a	2a'aad62a'aa97 |
c9(555f85(55f8	(555f85(55f8d5	'557c95'557f |
e2(aaab2a(aab2	(aaab2a)aa2a'aa	ae2a'aaab |
cbP8fOf8P8fOf8	OfcbfO |
e5)5535(5553)55	35(555a(5556(55	57 |
cfPbfOfbPbfOf9	OfcP |
ea(aaab2a(aab2	(aaab2a/aa"aa	ae(aaab |
ZZZI |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0xfc01Gc007g	7fe01ffehGf0g	c3k0180g06x03 |
c0w03G01Ge007	g7ff81ffehGf0	gc306j01800306	x03 |
c0w0787818060	0d80603c18ic0	hc306j01800306	x03 |
c0w0e01818030	0d80600e18ic0	hc006j01800306	x03 |
c0w0cgc180300d	80600618ic0hc0	06j01800306x03 |
c0w1cgc1803018	c0600718g18gc0	g3cc31f83e067	30019e0fc60cw
 03 |
c0w18g01803018	c0600318g18gc0	g7fc31f87f06f	3001G0fc61cw03 |
c0w18g01806030	!600318g18gc0	ge3c3060e387c	3001e3830638w
 03 |
c0w18g01Ge030	!60031ffchGe0	c1c3060c1878g	01c1830670w03 |
c0w180fe1Gc030	!60031ffchGe1	80c306180c70g	0180c306e0w03 |
c0w180fe180e0	6030600318ic0	0180c306180c60	g0180c307c0w03 |
c0w18g6180607f	f0600318ic001	80c306180c60g	0180c30780w03 |
c0w18g6180307f	f0600318ic001	80c306180c60g	0180c307c0w03 |
c0w1cg618030c0	18600718ic001	80c306180c60g	0180c306e0w03 |
c0w0cge18030c0	18600618ic001	80c306180c60g	0180c30670w03 |
c0w0e01e18030	c018600e18ic0	gc1c3060c1860	g01c1830638w03 |
c0w0787e18031	800c603c18g18	gc0ge3c3060e38	603001e383061c
 w03 |
c0w03G61803180	0c7ff81ffe18g	Gf07fc30787f0	603001G03c60e
 w03 |
c0xfc61803180	0c7fe01ffe18g	Gf03cc30383e0	6030019e01c606
 w03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
HfbZZZ |
e22224zzy03 |
c0g04zzy03 |
c8888czzy03 |
c0g04zzy03 |
e22224zzy03 |
c0g04zzy03 |
c8888ch1ce40f	e180zzr03 |
c0g04h08440420	80zzr03 |
e22224h084004	g80zzr03 |
c0g04h084c0487	80zzr03 |
c8888ch0fc407	8c80zzr03 |
c0g04h08440488	80zzr03 |
e22224h084404	0880zzr03 |
c8888ch084404	2880zzr03 |
e22224h084404	2d88zzr03 |
c8888ch1cee0f	e648zzr03 |
Hfczzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0ch1fd808g	80j01d3zzl03 |
e0g0ch124808g	80j0311zzl03 |
e0g0ch1248j02	g!0201zzl03 |
e0g0ch020b18e1	8e0e079c7787f1	1czzk03 |
e0g0ch020d8920	92190222920211	22zzk03 |
e0g0ch02088980	9803023ec20211	3ezzk03 |
e0g0ch020888c0	8c0d0220620211	20zzk03 |
e0g0ch02088860	86110220320211	20zzk03 |
e0g0ch02088920	92190232920211	3240zzj03 |
e0g0ch071dddc1	dc0e819ce187bb	9c40zzj03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0cm/55(5580	zl03 |
e0g0cm7fZJ80zl	03 |
e0g0cm2a/aa'aa	80zl03 |
e0g0cm7fZJ80zl	03 |
e0g0ch1fc0g04	g/55(5580zl03 |
e0g0ch1240g04	g7fZJ80zl03 |
e0g0ch1240h40	2a/aa'aa80zl03 |
e0g0ch0217770c	f07fZJ80zl03 |
e0g0ch020d2204	40/55(5580zl03 |
e0g0ch02082204	407fZJ80zl03 |
e0g0ch02081404	402a/aa'aa80zl	03 |
e0g0ch02081c04	407fZJ80zl03 |
e0g0ch02!0804	42/55(5580zl03 |
e0g0ch071c080e	327fZJ80zl03 |
e0g0cj10h2a/aa'aa	80zl03 |
e0g0cj50h7fZJ	80zl03 |
e0g0cj60h/55(55	80zl03 |
e0g0cm40g04zh	80zl03 |
e0g0cm622224zh	80zl03 |
e0g0cm40g04zh	80zl03 |
e0g0cm48888czh	80zl03 |
e0g0cm40g04zh	80zl03 |
e0g0cm622224zh	80zl03 |
e0g0cm40g04h3b	8f80h40g18g01	440280h0cj80zl	03 |
e0g0cm48888ch	110480h40g08g	01440280h04j80	zl03 |
e0g0cm40g04h19	8c8001h0108g01	404280h08j80zl	03 |
e0g0cm622224h	0888b0e3c0c703	cb0eg0cf0g7773	817380h80zl03 |
e0g0cm40g04h08	88d991g49010d	91g0440g222440	d440h80zl03 |
e0g0cm48888ch	0cd88831g4c01	089fg0440g2227	c087c0h80zl03 |
e0g0cm48888ch	055088d1g4601	0890g0440g1544	g84i80zl03 |
e0g0cm622224h	07708911g4301	0890g0440g1dc4	g84i80zl03 |
e0g0cm48888ch	02208991g4901	0899g0440g0886	408640h80zl03 |
e0g0cm622224h	0221dce8c0eeg	ddceg0e30g0883	81c380h80zl03 |
e0g0cm7fGfczh	80zl03 |
e0g0cm60fe0czh	80zl03 |
e0g0cm60fe0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0cn60	j38n80zl03 |
e0g0cm60g0cn20	j4cn80zl03 |
e0g0cm60g0cn20	4001h44n80zl03 |
e0g0cm60g0ch1d	99b3638e71e0f3	83d7770cn80zl	03 |
e0g0cm60g0ch24	88d9b6d28b2046	c10d2218n80zl	03 |
e0g0cm60g0ch30	88891458fa2044	41082210n80zl	03 |
e0g0cm60g0ch18	8889144c822044	41081410n80zl	03 |
e0g0cm60g0ch0c	88891446822044	41081co80zl03 |
e0g0cm60g0ch24	d8d9b6d2cb6046	c1!0810n80zl03 |
e0g0cm60g0ch38	6cb1639c719033	80dc0810n80zl	03 |
e0g0cm60g0cj81	m10o80zl03 |
e0g0cm60g0cj81	m50o80zl03 |
e0g0cm60g0ci01	c380l60o80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm60g0czh	80zl03 |
e0g0cm7fGfczh	80zl03 |
e0g0cm622224zh	80zl03 |
e0g0cm48888czh	80zl03 |
e0g0cm622224zh	80zl03 |
e0g0cm48888czh	80zl03 |
e0g0cm622224zh	80zl03 |
e0g0cm40g04zh	80zl03 |
e0g0cm48888czh	80zl03 |
e0g0cm40g04zh	80zl03 |
e0g0cm622224zh	80zl03 |
e0g0cm40g04zh	80zl03 |
e0g0cm48888czh	80zl03 |
e0g0cm40g04zh	80zl03 |
e0g0cm622224zh	80zl03 |
e0g0cm40g04zh	80zl03 |
e0g0cm48888czh	80zl03 |
e0g0cm40g04zh	80zl03 |
e0g0cm40zj80zl	03 |
e0g0cm7fZJ80zl	03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0ch01g30i3b	8eg18i20h5c73	a7843c7881c7h	20h3009f80fe0
 g03f8h43c04060	21e03c783f8e9f	c0878f1ei03 |
e0g0ch01g10i11	04g08i20h4826	6ccc66cc8082h	20h60188c0920
 h8chc660!c063	30664010999241	8cd9b3i03 |
e0g0ch028210i	198cg08g4004i	8c642854428440	c6k8018840920
 h84g01442141g	a2104280!1092	428850a1i03 |
e0g0ch0287961c	d8700888e5c98e	f38f639bg8446	g844284404472
 e7639b01g288c	010cc7g8271c0	40204204221202	e0121802g8859
 a1i03 |
e0g0ch04421b22	6cc80889b34912	464426cd810443	83844284204489
 a926cd81e048f8	01044880828b20	!4043c4233204	301e0e02g8ccf
 33i03 |
e0g0ch0442113e	44180cd9120e18	40c424488106!c0	444284206cf90c
 2448833048b001	044f8082fag40	80466021e00818	120302g87999e
 i03 |
e0g0ch07c21120	44680551120a0c	43442448810280	20444284202881
 06244882108890	010448g!82g41	g44"20100810g	82g809082i03 |
e0g0ch08221120	44880771120906	!442448810384	28444284203881
 0324488210fc88	010448g8482g42	g44!2040200810	9082g811084i03 |
e0g0ch08221132	44c80221b20892	464426c8810106	6cc466cc2010c9
 0926c88332088c	0106cc808ccb20	46204664218262	90109982g8619
 98i03 |
e0g0ch1c71bb9c	ee740220e71cdc	33a3739dc08105	c79f3c78401073
 8e739dc1e209c6	03836703f871c1	f7e1f3c4fb027e	e03f970703ec0f
 30i03 |
e0g0cx80k40zt	03 |
e0g0cx40k80zt	03 |
e0g0cx40k80zt	03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0ck1ci06h04	18h20zzh03 |
e0g0ck08i02h04	08h20zzh03 |
e0g0ck08g80g02	h0a08g0820zzh	03 |
e0g0ck09b1ebb3	1e39700a08e5de	20zzh03 |
e0g0ck08d88691	3244d011091348	20zzh03 |
e0g0ck08888411	227c801109f208	20zzh03 |
e0g0ck08888411	2240801f090208	20zzh03 |
e0g0ck08888411	22408020890208	zzi03 |
e0g0ck0888841b	36648020899208	20zzh03 |
e0g0ck1ddc6e0d	9939c071dce706	20zzh03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0ct0ffezzi	03 |
e0g0ct0802zzi	03 |
e0g0ct7ff2zzi	03 |
e0g0ct4012zzi	03 |
e0g0ch1fd808g	80i10i4012i0c	i10g0180m9830	g70hc0l08j0el
 03 |
e0g0ch124808g	80i10i4f92i04	i10h80m8810gc0	h40l08j18l03 |
e0g0ch1248n02	g4012i04g2002	i80g04k0810g80	g0840q10l03 |
e0g0ch020b18e1	8e0e06cbb3b9c7	9c40120eee72e4	c779c7b1cd8098
 e6cf070e38e39d	8b11c1f72e1e58	7038e6c7739b18	e6c38e073el03 |
e0g0ch020d8920	921903669113!22	4f920444d9a489	23221366c09113
 640c996514a48d	92208d9a086c88	65b362244d8913	66510d90l03 |
e0g0ch02088980	98030224111062	3e401204448907	0c2062122440e1
 f224019041f630	8893e088900844	f841122227c889	f2241f0890l03 |
e0g0ch020888c0	8c0d022410a1a2	20401202a88905	0621a2122440a1
 02240690410318	8892g88900844	80411221440889	0224100890l03 |
e0g0ch02088860	8611022410e222	204f9e03b88904	83!2212244091
 0224089041018c	8892g88900844	80411221c40889	0224100890l03 |
e0g0ch02088920	92190364104322	3240100110d904	49232213644089
 93640c996594a4	8993208d900844	c865b220864889	9226590d90l03 |
e0g0ch071dddc1	dc0e82ce3841d1	9c40100110738e	6e19d1b9cee1cc
 e2c3074e38e739	cf39c1e73806ee	7038e770839ddc	e7738e073cl03 |
e0g0cn02k7ff0	q02zq03 |
e0g0cn02x02zq	03 |
e0g0cn07x07zq	03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0ch01g30i1f	c0h60l0301h03	80g7e26601e80	zn03 |
e0g0ch01g10i04	60h20l!01h06h	2322203180zn03 |
e0g0ch028210i	0420h20l01i04	h2102!208021zm	03 |
e0g0ch0287961c	d87004139dce23	9b1cb9c3bb9cb9	33361f0fb97023
 6220409c7bce77	zk03 |
e0g0ch04421b22	6cc80414489126	cda26a41113669	211b24046cd03e
 22204032211122	zk03 |
e0g0ch0442113e	44180417c89f24	48be4301112241	c1112204448023
 22204006211f22	zk03 |
e0g0ch07c21120	44680414051024	48a04180aa22!41	11320444802122
 20401a211014zk	03 |
e0g0ch08221120	44880424071024	48a040c0ee2241	21111c04448021
 222060a221101c	zk03 |
e0g0ch08221132	44c80466421926	cdb24240443641	!1110046c8023
 22203132211908	20zj03 |
e0g0ch1c71bb9c	ee741fc3820e73	8b1ce380441ce3	9bbb9e0f39c07e
 77701e1d18ce08	20zj03 |
e0g0cs08n21p10	zk03 |
e0g0cs08n33p50	zk03 |
e0g0cs1cn1ep60	zk03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czi7ff0zt	03 |
e0g0czi4010zt	03 |
e0g0czh03G90zt	03 |
e0g0czh02g90zt	03 |
e0g0ch1fd808g	80l3062j1808g	02g90gfem80zj	03 |
e0g0ch124808g	80l1022j!08g02	7c90g23m80zj03 |
e0g0ch1248k20	i1020j08h02g90	g21i20i08zj03 |
e0g0ch020b18e1	8e1b0e78381b33	16263836e1c38b	19b0e2g90g209c
 1b0e786639c19e	zj03 |
e0g0ch020d8920	920d9b20640d91	1b22641b33264d	88d9127c90g20
 b60d9b20224a20	88zj03 |
e0g0ch02088980	980891200c0891	11224011106408	8889f2g90g20a2
 0891202263e088	zj03 |
e0g0ch020888c0	8c089120340891	112240!11a408	888902g90g20a2
 0891202232g88	zj03 |
e0g0ch02088860	86089120440891	11224011122408	8889027cf0g21
 22089120221ag	88zj03 |
e0g0ch02088920	92089b20640d9b	13226411132648	888992g81g2336
 089b20364b2088	40zi03 |
e0g0ch071dddc1	dc1dce183a0b0d	9e77383bb9d39d	dddce6g81gfe1c
 1dce181b71c1c6	40zi03 |
e0g0cq08p0dG80	zt03 |
e0g0cq08p1fzv	03 |
e0g0cq1cp3f80	zu03 |
e0g0czh3b80zu	03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0fe0czzy03 |
e0fe0czzy03 |
e0fe0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
e0g0czzy03 |
Hfczzy03 |
e22224zzy03 |
c8888czzy03 |
e22224zzy03 |
c8888czzy03 |
e22224zzy03 |
c0g04zzy03 |
c8888czzy03 |
c0g04zzy03 |
e22224zzy03 |
c0g04zzy03 |
c8888czzy03 |
c0g04zzy03 |
e22224zzy03 |
c0g04zzy03 |
c8888czzy03 |
c0g04zzy03 |
ZZZI |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
c0zzzg03 |
ZZZI |
ZZZI |
\enddata{raster, 271271928}
\view{rasterview,271271928,34,0,0}
Figure 4: Screen dump of active \italic{grade} window


Although not shown in these basic demonstration figures, the ATK editor allows 
formatted text, and a rich variety of other types of data to be put in 
documents such as equations and line drawings.  This capability will be 
exploited as more real-world documents such as proposals and articles are 
exchanged for annotation with \italic{turnin}.


With the \italic{grade} and \italic{eos} applications, we finally realized the 
goal of enabling the teacher to point at papers on the screen, view them in 
final form, annotate them, and return them.  The students are able to use the 
integrated system to receive the annotated papers, and use them directly for 
their next draft simply by deleting the annotations after reading them.


\subsection{3.3	Deployment Strategy

}
We are following a conservative path for migrating users to the new server. 
 Although the greater maintainability is tempting, our first priority is 
reliable service.  We decided to extensively test and experiment with the new 
version before getting rid of the old version.  Consequently the new server 
and applications programs have only been in use by two classes of 25 students 
each for the past term.  The single server configuration has been running for 
94 days so far without crashing.  Nobody has reported a single problem with 
server reliability.  These two courses, however can be considered well 
behaved.  One of the professors had extensive experience with the old 
\italic{turnin} and never tries anything out of the ordinary.  The two courses 
share the same teaching assistant who also had extensive experience with 
\italic{turnin}.


This summer we plan test \italic{turnin} with simulated work loads of courses 
with 250 students in them.  We hope to offer \italic{turnin} this September as 
a replacement option for all courses presently using the NFS based 
\italic{turnin}.  Our development team has acquired a reputation for producing 
good software, so we expect that courses will be strongly encouraged to use 
the new \italic{turnin}.  We hope to phase out the NFS based \italic{turnin} 
by the end of next academic year.


We will verify that our quota management procedures are workable.  This will 
involve discussions with the operations staff to determine if separate volumes 
should be created or if the server should be changed to set a particular 
owner, or if it should enforce a quota itself.


\section{4	Future directions

}
The present system allows storing files on secondary servers, identifying when 
all files are accessible, and merging in files from several places.  It still 
has no provision for dividing work amongst servers in an equitable way.  The 
list of servers to contact, and in what order is either registered with our 
\italic{Hesiod} name server [Dyer1988] , or set in the \typewriter{FXPATH} 
environment variable.  This makes determining primary and secondary servers a 
very static process.


Since the database is replicated, it should store a mapping of course name to 
a record of primary server and secondary servers.  Then the FX library can 
contact any server for a list of the appropriate servers.  The database can 
change the servers at any time.  We initially expect a person to monitor the 
usage and adjust the database.  In the far future heuristics to do load 
balancing automatically could be added.


We expect the user interface to continue to evolve into smoother integration 
with classroom procedures.


We would like to produce a set of interfaces for industrial use.  The user 
paradigm would be documents cycling between author and either management or 
peers for  review and revision.


The command line user interfaces would work, as is, on any UNIX platform that 
could accommodate a port of the FX library.  It is possible that the WYSIWYG 
integrated interfaces could be ported to other platforms.  Since the Andrew 
Toolkit has window system independent imaging model, a Presentation Manager, 
or Macintosh Toolbox based system could be produced with only moderate effort.


The FX client library could be converted back into a filesystem based back end 
for use on timesharing hosts, or other transport mechanisms could be used in 
place of Sun RPC.


We started with a simple user interface idea:  exchange files as if they were 
papers passed around in class.  We now have a body of knowledge about this 
application domain, and a body of code that implements several variations on 
this theme.  A variety of interesting extensions can be made at comparatively 
low cost now that the basic work is done.


\section{5	References

}
\formatnote{.so /usr/lib/tmac/tmac.s

.po 1.25i

.vs 12

.]<

.\\"Barrett.E.-1987-4

.ds [F Barrett1987

.]-

.ds [A E. Barrett

.as [A ", F. Bequaert

.as [A ", and J. Paradis

.ds [T Electronic Classroom: Specification for a user interface

.ds [D 4 June 1987

.ds [I Athena Writing Project

.ds [C Boston, MA

.nr [T 0

.nr [A 0

.nr [O 0

.][ 2 book

.\\"Camblor.M-1988-5

.ds [F Camblor1988

.]-

.ds [A Maria Camblor

.as [A ", Rob Shaw

.as [A ", Bruce Lewis

.as [A ", and William Cattey

.ds [T File Exchange For The Educational On-Line System,

.ds [T Design Specification

.ds [D February 1988

.ds [I Athena Writing Project

.ds [C Boston, MA

.nr [T 0

.nr [A 0

.nr [O 0

.][ 2 book

.\\"DellaFera.C.A-1988-1

.ds [F DellaFera1988

.]-

.ds [A C. Anthony DellaFera

.ds [T The Zephyr Notification Service

.ds [J Proceedings of the USENIX Winter Conference

.ds [I USENIX Association

.ds [C Berkeley, CA

.ds [P 213\\-219

.nr [P 1

.ds [D February, 1988

.nr [T 0

.nr [A 0

.nr [O 0

.][ 1 journal-article

.\\"Dyer.S.P.-1988-10

.ds [F Dyer1988

.]-

.ds [A Stephen P. Dyer

.ds [T The Hesiod Name Server

.ds [J Proceedings of the USENIX Winter Conference

.ds [I USENIX Association

.ds [C Berkeley, CA

.ds [P 183\\-189

.nr [P 1

.ds [D February, 1988

.nr [T 0

.nr [A 0

.nr [O 0

.][ 1 journal-article

.\\"Heller.N.H-1989-8

.ds [F Heller1989

.]-

.ds [A N. Hagan Heller

.ds [T Designing a User Interface for the Educational On-line System

.ds [D May 1989

.ds [I Massachusetts Institute of Technology

.ds [C Boston, MA

.nr [T 0

.nr [A 0

.nr [O 0

.][ 2 book

.\\"Lewis,.B.R.-1989-6

.ds [F Lewis,1989

.]-

.ds [A B. R. Lewis

.ds [T File Exchange Client Library

.ds [D June 1989

.ds [I Massachusettes Institute of Technology

.ds [C Boston, MA

.nr [T 0

.nr [A 0

.nr [O 0

.][ 2 book

.\\"Murman.E.-1988-2

.ds [F Murman1988

.]-

.ds [A E. Murman

.as [A ", A. Lavin

.as [A ", and S. Ellis

.ds [T Enhancing Fluid Mechanics Education with Workstation Based Software

.ds [J AIAA 88-0001

.ds [D January 1988

.nr [T 0

.nr [A 0

.nr [O 0

.][ 1 journal-article

.\\"Palay.A.J.-1988-7

.ds [F Palay1988

.]-

.ds [A Andrew. J. Palay

.as [A ", Wilfred J. Hansesn

.as [A ", Mark Sherman

.as [A ", Maria G. Wadlow

.as [A ", Thomas P. Nuendorffer

.as [A ", Zalman Stern

.as [A ", Miles Bader

.as [A ", and Thom Peters

.ds [T The Andrew Toolkit - An Overview

.ds [J Proceedings of the USENIX Winter Conference

.ds [I USENIX Association

.ds [C Berkeley, CA

.ds [P 9\\-21

.nr [P 1

.ds [D February, 1988

.nr [T 0

.nr [A 0

.nr [O 0

.][ 1 journal-article

.\\"Raeburn.K-1989-3

.ds [F Raeburn1989

.]-

.ds [A Ken Raeburn

.as [A ", Jon Rochlis

.as [A ", Stan Zanarotti

.as [A ", and William Sommerfeld

.ds [T Discuss: An Electronic Conferencing System for a Distributed Computing 
Environment

.ds [J Proceedings of the USENIX Winter Conference

.ds [I USENIX Association

.ds [C Berkeley, CA

.ds [P 331\\-343

.nr [P 1

.ds [D February, 1989

.nr [T 0

.nr [A 0

.nr [O 0

.][ 1 journal-article

.\\"Williams.N-1990-9

.ds [F Williams1990

.]-

.ds [A Nick Williams

.as [A " and William Cattey

.ds [T The Educational On-Line System

.ds [ Proceedings of the EUUG Spring Conference

.ds [I EUUG

.ds [D April 1990

.nr [T 0

.nr [A 0

.nr [O 0

.][ 2 book

.]>

}\enddata{text,271714732}
