\begindata{text,270679976}
\textdsversion{12}
\template{default}
\define{italic
menu:[Font,Italic]
attr:[FontFace Italic Int Set]}
\define{bold
menu:[Font,Bold]
attr:[FontFace Bold Int Set]}
\define{chapter
menu:[Title,Chapter]
attr:[Justification LeftJustified Point 0]
attr:[FontFace Bold Int Set]
attr:[FontSize PreviousFontSize Point 4]}
\define{section
menu:[Title,Section]
attr:[Justification LeftJustified Point 0]
attr:[FontFace Bold Int Set]
attr:[FontSize PreviousFontSize Point 2]}
\define{subsection
menu:[Title,Subsection]
attr:[Justification LeftJustified Point 0]
attr:[FontFace Bold Int Set]}
\define{paragraph
menu:[Title,Paragraph]
attr:[Justification LeftJustified Point 0]
attr:[FontFace Italic Int Set]}
\define{bigger
menu:[Font,Bigger]
attr:[FontSize PreviousFontSize Point 2]}
\define{indent
menu:[Region,Indent]
attr:[LeftMargin LeftMargin Inch 32768]
attr:[RightMargin RightMargin Inch 32768]}
\define{typewriter
menu:[Font,Typewriter]
attr:[FontFace FixedFace Int Set]
attr:[FontFamily AndyType Int 0]}
\define{underline
menu:[Font,Underline]
attr:[FontFace Bold Int Set]}
\define{display
menu:[Region,Display]
attr:[LeftMargin LeftMargin Inch 32768]
attr:[RightMargin RightMargin Inch 32768]
attr:[Justification LeftJustified Point 0]}
\define{example
menu:[Region,Example]
attr:[LeftMargin LeftMargin Inch 32768]
attr:[Justification LeftJustified Point 0]
attr:[FontFace FixedFace Int Set]
attr:[FontFamily AndyType Int 0]}
\define{description
menu:[Region,Description]
attr:[LeftMargin LeftMargin Inch 32768]
attr:[Indent LeftEdge Inch -32768]}
\define{quotation
menu:[Region,Quotation]
attr:[LeftMargin LeftMargin Inch 32768]
attr:[RightMargin RightMargin Inch 32768]
attr:[FontFace Italic Int Set]}
\define{subscript
menu:[Font,Subscript]
attr:[Script PreviousScriptMovement Point 2]
attr:[FontSize PreviousFontSize Point -2]}
\define{superscript
menu:[Font,Superscript]
attr:[Script PreviousScriptMovement Point -6]
attr:[FontSize PreviousFontSize Point -2]}
\define{smaller
menu:[Font,Smaller]
attr:[FontSize PreviousFontSize Point -2]}
\define{heading
menu:[Title,Heading]
attr:[LeftMargin LeftMargin Inch -13107]
attr:[Justification LeftJustified Point 0]
attr:[FontFace Bold Int Set]}
\define{majorheading
menu:[Title,MajorHeading]
attr:[Justification Centered Point 0]
attr:[FontSize PreviousFontSize Point 4]}
\define{formatnote
menu:[Region,FormatNote]
attr:[Flags PassThru Int Set]}
\define{subheading
menu:[Title,Subheading]
attr:[Justification LeftJustified Point 0]
attr:[FontFace Bold Int Set]}
\define{center
menu:[Justify,Center]
attr:[Justification Centered Point 0]}
\define{flushleft
menu:[Justify,FlushLeft]
attr:[Justification LeftJustified Point 0]}
\define{flushright
menu:[Justify,FlushRight]
attr:[Justification RightJustified Point 0]}
\define{leftindent
menu:[Region,LeftIndent]
attr:[LeftMargin LeftMargin Inch 32768]}
\define{programexample
menu:[Region,ProgramExample]
attr:[LeftMargin LeftMargin Inch 32768]
attr:[Justification LeftJustified Point 0]
attr:[FontFace FixedFace Int Set]
attr:[FontFamily AndyType Int 0]}
\define{tutortabs
menu:[Justify,TutorTabs]
attr:[Tabs AllClear Int 0]
attr:[Tabs LeftAligned Point 62]
attr:[Tabs LeftAligned Point 124]
attr:[Tabs LeftAligned Point 190]
attr:[Tabs LeftAligned Point 90]}








\bigger{\majorheading{The Andrew Environment


for Development of Educational Computing}}



\center{Wilfred J. Hansen


\italic{Information technology Center

Carnegie-Mellon University}


and


\italic{Computing Science Department

University of Glasgow}



April, 1987}





\indent{\bold{Abstract:} Andrew is being developed at Carnegie-Mellon 
University as an environment for computing by all members of the campus 
community.  The system includes a file system, user interface software, and 
the CMU-Tutor facility for building instructional material.  This 
demonstration focuses on the latter environment, showing how it provides 
excellent facilities for generating images and evaluating student responses to 
questions. }




\heading{I.  Introduction}


Carnegie-Mellon University recognized some years ago that computing is an 
important community resource.  They began, shortly thereafter, joint 
development with IBM of the system which has since become known as Andrew 
[Morris 1986].  The goal of this effort is to make possible universal 
interconnection of advanced workstations, one for each student, staff, and 
faculty member.  These computers support training by offering the tools that 
professionals use in practice.  They support research by providing common 
tools of statistical analysis and data bases.  Perhaps even more importantly, 
they support the community with the mundane tasks of communication: 
 electronic mail, class work, scholarly publications, and documents of all 
kinds. 


With such pervasity of computing, it has become possible to explore 
non-traditional education with computers.  In pursuit of this, the Tutor 
system was seen as the most promising of the approaches and a similar approach 
was developed for Andrew.  This is the CMU-Tutor programming environment for 
the construction of "lessons," where each lesson is a tutorial program which 
leads a student through learning some topic of knowledge [Sherwood, 1986a; 
1986b]. 


In this paper I will briefly sketch the Andrew file system and user interface 
and then describe the CMU-Tutor environment. 



\heading{II.  Vice, The Andrew File System}


Vice, the Andrew file system, enables each user to sit at any workstation on 
campus and access all files to which he or she has access from any 
workstation.  Moreover, this is done within a name hierarchy that hides for 
the user the physical location of his or her files.  The user's view of a file 
is a name, a set of access permissions, and a contents.  The files for user 
xxx in department ddd will all have names beginning with /cmu/ddd/xxx/, a 
top-down hierarchical structure.  The access permission scheme is more 
detailed than that of other systems: each directory may be controlled as to 
exactly which users or groups of users have access to it. 


The file system stores files in dedicated file server computers.  These and 
all other workstations on campus are connected via IBM token ring technology. 
 Each workstation has a local disk to cache files and a \italic{Venus} process 
to communicate with the file server.  When any other process on the 
workstation tries to open a file, Venus is notified, communicates with the 
server to get the file to the cache and supplies the cached copy of the file 
to the process. 



\heading{III. Virtue, The Andrew User Interface}


Andrew is predicated upon advanced workstations with large screen, bit-mapped 
displays, so it was necessary to develop user interface software to provide 
for sharing the screen among applications and exploiting the graphic and 
textual potential.  The lowest level of this software is a window manager, 
\italic{wm}, which tiles the screen into a separate window for each 
application, as shown in Figure 1.  In this Figure, the window in the upper 
left is a clock, the window in the lower left is a shell interface for giving 
commands to the system, the window in the upper left is a text editor, and the 
window in the lower left is the educational lesson \italic{gt}. 


The \italic{wm} window manager is implemented as a separate process to which 
other processes communicate for window allocation and graphic services.  It 
also listens to the keyboard and mouse, distributing inputs from them to the 
appropriate destination processes.  The \italic{gt} window, for example, draws 
the axes of its graph with calls like these: 


\programexample{wm_MoveTo(GX(0), GY(500));

wm_DrawTo(GX(0), GY(0));

wm_DrawTo(GX(25), GY(0)); }


where GX and GY are macros which convert from coordinates for the graph to 
coordinates within the \italic{gt} window. 


The three windows in Figure 1 other than the clock window all employ Andrew's 
\italic{base editor} for manipulation of text.  This facility provides full 
typographic text including fonts, font sizes, indentation, justification, 
tabs, and sub- and superscripts.  User manipulation of this text is the same 
in all windows so the user need learn only one set of conventions for dealing 
with text.  The advantages for the programmer are enormous because individual 
programs need not handle text interaction. 


The \italic{gt} application is a prototypical educational application, and was 
the first constructed for Andrew.  It is a simulation intended to teach the 
relationships of position, velocity, and acceleration.  The graph in the 
middle of the window depicts six posts with ramps between them along which a 
ball can roll.  The height of each post can be adjusted by pointing above or 
below its top and clicking the left mouse button.  Below the posts and ramps 
are two bars to select the initial position and velocity for the ball; the 
user chooses a value from these bars by pointing at a position on them and 
clicking the mouse.  When the user selects the Roll Ball option from the menu, 
the ball rolls on the ramps and a graph of its position, velocity, or 
acceleration is displayed in the top portion of the window.  To give the user 
a goal, a graph is shown for a selected configuration of the parameters and 
the user is challenged to match that graph. 


\italic{Gt} illustrates two important differences between educational lessons 
on bit-mapped workstations with mice and small screen personal computers 
without.  First, the graphics are designed to adapt to any size window the 
user may choose.* This is essential anyway because it cannot be known what 
display hardware will be available.   Second, there is no "dialogue" between 
system and user to adjust the apparatus.  With PC based versions of 
\italic{gt}, the user is forced to answer a series of questions:  \italic{Do 
you want to adjust the parameters?}  \bold{yes}  \italic{Do you want to change 
a post height?} \bold{yes} \italic{Which post?} \bold{4}  \italic{Height is 1. 
 What new height?}  \bold{2}  \italic{Do you want to change another post?} 
 \italic{no}  \italic{Do you want to change the initial velocity?}  \bold{no} 
 \italic{Do you want ad nauseum} .  .  .  This entire exchange in \italic{gt} 
is a simple click above the second post.  After then choosing two menu options 
the image looks as in Figure 2.  Both this simple command interface and the 
adaptability of size contribute to a feeling in the user that he or she, 
rather than the computer, is in control. 



---------------------- 

(footnote)

* Perhaps a short digression on variable-sized windows is appropriate.  The 
small additional programming complexity for this adaptability amounted to 
about a page of code in \italic{gt}, but helps the system build in the user 
confidence that he or she is in control rather than the computer.  Programmers 
who have not yet written Andrew applications sometimes complain that this 
makes rational planning of screen usage difficult, but after experiencing use 
of the system in developing material, such complaints vanish.   If the user 
gives an application a window that is too small, the application may choose to 
complain and wait for a larger window; but if it just goes ahead and does its 
best a dissatisfied user can easily adjust the window size.

---------------------- 



\heading{IV.  CMU-Tutor}


Broadly defined, educational computing is any use of a computer that teaches 
someone something.  Andrew supports all such computing.  Sometimes, however, 
it is desirable to use a computer for presentation of material, as could be 
done with a book.  The advantage of the computer is that it can offer 
animations and other interaction with the student.  The pace of the 
presentation can be controlled by the author and the student can be questioned 
to ensure understanding of one concept before proceeding to the next.  Such a 
controlled presentation of material is called a "lesson". 


Building lessons with traditional programming languages is tedious.  Images 
must be constructed from the lowest level graphical primitives, sequencing has 
to be handled in every detail, and the interaction with the user must be 
written so as to cope with a great diversity of inputs.  In Andrew, it is also 
desirable to utilize the Virtue base editor, with its typographic quality text 
options.  Facilities to eliminate or reduce all these problems are provided 
directly by the CMU-Tutor programming language and development of lessons is 
supported by an associated programming environment. 


The CMU-Tutor environment includes a lesson editor, a lesson executor, and a 
growing body of lessons.  The executor is a portion of the lesson editor, so 
that while an author is preparing a lesson its pieces can be executed without 
waiting for a lengthy compilation.  Error diagnostics indicate the exact 
position where an error is detected by moving the editor selection to that 
point.  A comprehensive on-line manual is available and can be referenced by 
typing or pointing at a keyword. 


Each piece of the lesson is called a "unit", and typically describes a single 
step in the sequence of images that the student will see.  In some cases each 
unit clears the screen at its start, displays some image or animation, and 
asks for a student response.  In other cases units are subroutines that 
generate some portion of an image or simply massage some data.  Lessons are 
stored as base editor documents in a directory together with a "shell" script. 
 To initiate a lesson, the student types a command which is actually the name 
of the shell script.  This in turn loads the CMU-Tutor executor, giving it the 
lesson document and the names of any ancilliary files (fonts or data, 
perhaps).  In the lesson document the instructions are stored in 
machine-independent source form and are compiled as the student executes the 
lesson.  The compilation delay is almost invisible because of the speed of the 
computers used and a clever design of the executor. 


We can demonstrate CMU-Tutor with the lesson \italic{waves} developed by David 
Trowbridge, who has developed a number of lessons on Andrew [Trowbridge, 
1986].  \italic{Waves} teaches a student how to write equations for periodic 
motion such as a point on a rolling wheel.  As the lesson begins, the student 
soon comes upon the page shown in Figure 3.  Here the \italic{Anim} button in 
the lower right invites the user to start an animation by pointing at the 
button and clicking a mouse button.  Then the image of the ball in the upper 
right moves in a counter-clockwise circle returning to its present position at 
three-o'clock on the circle.  (Sorry, this is not a live demonstration; no 
amount of clicking the \italic{Anim} button in Figure 3 will budge the ball by 
even a pixel!) 


After the animation, \italic{waves} asks the user to describe the motion of 
the ball.  The correct answer is that the ball is making a uniform, circular 
motion, which is the first form of equation the lesson is going to teach. 
 When the student types a response it is echoed at the arrow just below the 
top left portion of the window.  The response is compared by the CMU-Tutor 
executor against a number of possibilities anticipated by the author and the 
program prints a message.  For this instance, the author has permitted 
misspellings and alternate word orders, so any answer saying something about 
"uniform" and "circular" will be accepted.  Possible answers include "uniform 
circular motion", "smooth circle", "it goes around steadily" "unform circul", 
"round reguler". 


After Figure 3, \italic{waves} displays the "Reference Circle" shown in Figure 
4.  In this Figure, notice the use of boldface and alternate fonts in the 
text, features which are easy when the lesson is an Andrew document, but which 
would be tedious in a C program.  Note also that the question is asking for an 
equation as the answer.   Here again the CMU-Tutor environment simplifies the 
lesson author's task: the system automatically accepts such diverse replies as 
wt, w*t, (w)/t, wwt/w.  (The equation is evaluated for a few random values of 
the variables and accepted if it gives the correct answer.) 


The author's view of the \italic{waves} lesson is shown in Figure 5, where the 
execution of the lesson is visible in the lower portion of the window.  The 
upper portion of the window is a base editor document containing the programs 
source of the lesson, in this case the portion of \italic{waves} which draws 
the page with the reference circle.  When the author selects the menu option 
"Execute Current Unit", execution is begun for the unit whose source text in 
the top of the window contains the edit cursor or selection.  The results of 
the execution are shown in the bottom of the window. 


For image construction, the band across the middle of the window provides a 
choice among the most used CMU-Tutor operations.  Clicking on one of these 
words inserts a line into the current unit with the edit cursor positioned for 
insertion of the arguments.  In most cases the arguments are coordinate 
positions in the image; these are entered into the program by clicking on the 
image area.  Each click inserts one coordinate pair in the current line, with 
correct punctuation.  Modifying the program to change coordinates can be done 
by modifying the program text, but it is often easier to use a clever 
CMU-Tutor trick:  select the coordinate pair in the lesson source and click in 
the lesson image.  The new coordinates will replace the selected coordinates 
in the source and the unit will be re-executed to show the result.  The author 
can repeatedly revise a coordinate until it is exactly right. 


Once the lesson has been constructed, the author can insert a single line in 
the CMU-Tutor source indicating how the lesson should be resized in response 
to varying window size.  When the lesson is executed its imagery, including 
font heights, is adjusted in accordance with the size of the window provided. 


To give some indication of how CMU-Tutor programs can build images, Figure 6 
gives an extract of \italic{waves} showing the unit that draws the reference 
circle in the upper right of Figure 4. 


To illustrate the CMU-Tutor facilities for answer judging, Figure 7 shows the 
code that evaluates the students attempt to describe the motion of the ball in 
Figure 3.  Two commands, -arrow- and -endarrow-, are the crux of answer 
judging.  They begin by displaying an arrow at the coordinates given and then 
await the student response.  When the student finishes the response by typing 
RETURN, statements after the -arrow- up to the -endarrow- are executed.  Among 
these are "answer judging" commands which compare the student response against 
some anticipated response.  If a match is found, the commands indented under 
the judging command are executed and control skips to the endarrow.  If the 
-answer- or -ok- commands match the response, the -endarrow- exits.  If one of 
the other judging commands match, the -endarrow- returns control to the 
-arrow- so the student can try again.  In the example, the operand to the -ok- 
command is a boolean expression which is true the third time the student makes 
a response; thus the student is given only three tries before the system gives 
the correct answer and proceeds with the lesson. 



\heading{V.  Conclusion}


This paper has described Andrew: its file system, its user interface, and the 
CMU-Tutor environment.  The latter provides to an author comprehensive tools 
for image construction and answer judging. 


As do all computer users, the users of Andrew will apply it in diverse ways. 
 Almost all will use it for communication--mail, documents--and most will use 
it for various computational purposes.  All will use the file system to access 
their personal files from diverse workstations, and all will interact through 
the user interface. 


As part of an educational institution, the members of CMU will also use 
computers for education:  faculty will create lessons and students will take 
them.  The CMU-Tutor environment helps both.  It simplifies lesson 
construction and generates lessons with a consistency of user interface that 
enables students to concentrate on the material instead of the system commands 
needed to get through it. 



\bigger{\majorheading{References}}


[Morris, 1986]  Morris, J. H.,  Satyanarayanan M., Conner, M. H., Howard, J. 
H., Rosenthal, D. S. H., and Smith, F. D.  "Andrew: a distributed personal 
computing environment,"  \italic{Comm ACM 29} (March, 1986) 184-201. 


[Sherwood, 1986a]  Sherwood, B. A. and Sherwood, J. N.  \italic{The CMU-Tutor 
Programming Language, Preliminary Edition.}  Stipes Pub. Co.,  10 Chester 
Ave., Champaign, Ill.  (1986)


[Sherwood, 1986b]  Sherwood, B. A.  "(Workstations at Carnegie-Mellon" 
Proc\italic{ FJCC}, IEEE Comp. Soc. (Nov 1986) 15-17. 


[Trowbridge, 1986]  Trowbridge, D.  "A sampler of educational software at 
CMU,"  \italic{Proc Nat Educ Comp Conf}, San Diego (June, 1986) 135-142. 







\bold{Figure 1.  Andrew screen image.}  Clockwise from upper left the windows 
are:  clock, text editor, \italic{gt} (a lesson in mechanics), and typescript 
(a shell interface).  The cursor is in the \italic{gt} window, so its title 
bar is inverse video, indicating where the next key typed will go.  The menu 
shows the "Roll ball" option and other options for \italic{gt}. 




\bold{Figure 2.  \italic{Gt} after adjusting a post.} Since the time of Figure 
1, the mouse has been clicked above the fourth post, a menu option has been 
chosen to change the graph type to Velocity vs.  Time, and Roll Ball has been 
selected. 




\bold{Figure 3.  Snap shot of an animation.}  To introduce uniform circular 
motion, \italic{waves} displays this image.  When the student clicks on the 
\italic{Anim} button the "ball" in the upper right is moved in a 
counter-clockwise circle 160 pixels in diameter.   Then waves displays the 
question in the upper left.  As this picture was taken, the student is 
answering the question after the arrow below the question.  Although one 
correct response is "uniform circular", the response shown will be accepted 
because spelling correction is enabled for this answer. 




\bold{Figure 4.  A complex graphic image.}  Note the dashed circle, curved 
arrow, Greek letters, and bold text.  The student is answering another 
question at the arrow in the upper left. 




\bold{Figure 5.  Creation of a CMU-Tutor Lesson.}  The lower portion of the 
window displays the execution of the lesson, the upper portion displays the 
source code, and the middle displays a selection of operators that create 
statements in the program. 


\tutortabs{\programexample{

unit	AnimPt13

calc	X1 := 650;  Y1 := 50;  X2 := 900;  Y2 := 350

	N := 13

	Yheight := (Y2-Y1)/2

	Xratio := zheight/zwidth   $$ the window's aspect ratio

gorigin	(X2+X1)/2,(Y2+Y1)/2        $$ set the origin

bounds	-(Xratio/1.2)*Yheight, -Yheight; 

		(Xratio/1.2)*Yheight, Yheight

scalex	100

scaley	100

gat	0,0		  $$ start at the new origin

*

unit	ShowAngle

calc	theta := 1.047      $$ pi/3, or 60 degrees

	rx := radius*cos(theta)

	ry := radius*sin(theta)

do	AnimPt13

gcircleb	80		  $$ draw dashed circle        <<

axes	-Xratio*Yheight, -Yheight;  Xratio*Yheight, Yheight  $$ <<

gdraw	0,0; rx,ry		  $$ draw radius at angle phi  <<

gat	0,0

gcircle	30,0,60		  $$ draw the curved arrow     <<

gdraw	19,17;16,25		  $$     and its arrowhead     <<

gdraw	;22,25		  $$	         <<

gat	36,35

write	\formatnote{\\(*f}		  $$ print the Greek phi       <<

icons	waves12

gat	rx,ry

plot	"O"		  $$ plot the ball             <<

}}

\bold{Figure 6.  Graphics commands.}  This subroutine draws the reference 
circle in the upper right of Figure 4.  Each of the lines marked with "<<" 
draws a piece of the picture.   Unit AnimPt613 sets the graphics origin and 
bounds.  It is used by a number of animations so they share the same graphics 
portion of the window. 


\tutortabs{\programexample{

unit	GetCirc

calc	SaidUnif := FALSE

arrow	X1, Y1; X2, Y2

specs	nookno, okextra, okspell, noorder

answer	[steady steadily uniform uniformly regular smooth]

			[circle circular round around]

	do	GoodMsg

answer	[dont cant don't can't not no]

			[know say tell sure remember idea]

	do	OkayMsg	$$ "You may have noticed ..."

wrong	[smooth smoothly steady steadily uniform uniformly regular]

	do	SteadyMsg	$$ "... be more specific ..."

	calc	SaidUnif:=TRUE

wrong	[circle circular round around]

	if	SaidUnif

		do	GoodMsg

		judge	ok

	else

		do	CircMsg   $$ "Yes ... and ..."

		judge	quit

	endif

ok	zntries > 2

no

	do	DntFolMsg(zntries)    $$"We don't follow you..."

endarrow

$$

unit	GoodMsg

$$		Print a message

text

That's correct.

\\\\}

}
\bold{Figure 7.  Unit to Accept Student Response.}  The correct answer is 
"uniform circular", but many variants are accepted.  If the student says 
"circular" an attempt is made to get the additional information of "uniform." 
 The various XxxxMsg units each print an appropriate message.  The \bold{ok} 
command will accept any answer if the student has formerly made two other 
answers.  The \bold{no} command is unconditional and will be executed if no 
other judging command matches the student's response;  it prints a message 
that the computer does not follow the student. 


\enddata{text,270679976}
