<?php require_once "fs_inner_context.inc"; ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
     "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">

<title><?php echo $HTML_TITLE; ?></title>

</head>

<?php echo html_bgcolor_body($BG_COLOR); ?>

<!-- Standard hierarchical header structure -->

<?php echo $CS_HEADER_HTML; ?>

<?php echo html_linked_text("<em>Courses</em>", $CS_COURSES_ROOT_URL); ?>

<?php echo $HTML_HEADER; ?>

<hr><hr>

<?php echo html_header($HTML_HEADER_LEVEL + 1, "<a name=\"instructions\">General Instructions</a>"); ?>

<?php echo html_header($HTML_HEADER_LEVEL + 2, "Importance of homework"); ?>

<p>Homework exercises are absolutely key to comprehension of the
course material. Important qualities of the structure of computer programs are
determined, not just by mental contemplation of the programs, but by the
detailed logistical efforts required to make them work. You can only begin to
understand those logistical efforts by making some of them for yourself.</p>

<p>Homework exercises are also key to my evaluation of your work. It is
impossible to receive a satisfactory grade in this course without performing
well on the homeworks.</p>

<?php echo html_header($HTML_HEADER_LEVEL + 2, "Submitting your work"); ?>

<p>All homework assignments must be submitted using the
<code>handin</code> command before 11:59 PM on the due date.</p>

<p>If illness or personal/family difficulties delay your work, let me
know as soon as possible and we can make special arrangements. A
moderate amount of trouble with the computer systems is a normal part
of computing, and you must budget time for it. I will give extensions
only for massive computer failures, e.g. all CS <em>Linux</em> systems
out of commission for a whole day.</p>

<p>I have a bimodal attitude toward lateness, modelled by mathematical
catastrophe theory. As long as lateness isn't causing logistical
problems for the class, I don't pay much attention to small
(i.e. minutes or an hour) lateness. If lateness starts causing
logistical problems, I turn into a terrible rigid authoritarian. In
particular, I may decide to close assignments at the due minute by
disabling the <code>handin</code> command.</p>

<?php echo html_header($HTML_HEADER_LEVEL + 3, "<a name=PATH>Getting
to the <code>handin</code> command</a>"); ?>

<p>The <code>handin</code> command is only available on the CS
Department's <em>GNU/Linux</em> hosts, and will not work at other
locations even if copied there. The command is stored at
<code>~odonnell/Teaching/Utilities/handin</code>.</p>

<p>To avoid typing that long sequence each time you use it, you may
add <code>~odonnell/Teaching/Utilities</code> to your execution path,
<code>$PATH</code>. <code>$PATH</code> is a shell environment variable
containing a sequence of locations to search for executable commands,
separated by colons (<code>:</code>). To find out the contents of your
<code>$PATH</code>, type <code>echo $PATH</code>. To add my command
directory to it, type <code>export
PATH="${PATH}:~odonnell/Teaching/Utilities"</code>.</p>

<p>To avoid resetting your <code>$PATH</code> every time you start an
interactive shell, you may add <code>export
PATH=${PATH}:~odonnell/Teaching/Utilities</code> to the <em>end</em>
of a file named <code>.bashrc</code> in your home directory, or you
can modify a path assignment that's already there, e.g. to
<code>export
PATH="$HOME/bin:$PATH:.:~odonnell/Teaching/Utilities"</code>.</p>

<?php echo html_header($HTML_HEADER_LEVEL + 3, "<a name=handin>Using
the <code>handin</code> command</a>1"); ?>

<p>To hand in your work on a particular assignment:</p>

<ol>

<li>Use <code>cd</code> to enter a directory containing your
work.<br><br></li>

<li>Type <code>handin n file1 file2 ...</code> where <code>n</code> is
the number of the assignment, and <code>file1</code>,
<code>file2</code>, .. are all the files containing the work that you
wish to hand in.</li>

</ol>

<p><code>handin</code> will warn you if the assignment number is
invalid, or if one or more of the files doesn't exist, or isn't a
regular file. The files that you hand in are stored <em>only</em> by
their base names (the part after the rightmost "<code>/</code>", if
there is one), <em>not</em> by their paths. <code>handin</code> will
<em>not</em> warn you if you submit several files with the same base
names, and only the first one will get through the handin
properly. I'll try to create a warning in an upgrade of
<code>handin</code>.</p>

<p>If you mistype some of the file names, <code>handin</code> will
still put in the good ones. But you should resubmit with all of the
files, not just the ones that missed the first time.</p>

<p>You may resubmit as many times as you like, up until the assignment
deadline. I normally only look at the last submission, but I save them
all in case we have to unwind from a problem.</p>

<?php echo html_header($HTML_HEADER_LEVEL + 3, "Which files to hand
    in"); ?>

<ol>

<li>One or more files of definitions, saved from the definitions
window in <em>DrScheme</em>. Each one must have a sensible name
(sometimes specified by the assignment), ending in
"<code>.scm</code>". Each one must have a block of comments at the top
with your name shown prominently.<br><br></li>

<li>One or more files of test cases. In the early assignments, these
will be test suites saved from the test suite window in
<em>DrScheme</em>. We may switch to a different technique for using
test cases in later assignments.<br><br></li>

<li>Possibly one or more explanatory text files. Some explanation can
go in the definitions files in the form of comments, but later
assignments will probably require some explanations that are too long
or delicately formatted to fit nicely in <em>Scheme</em>
comments. Explanatory text files may be in a number of formats,
including:<br><br>

<ol>

<li>Plain text (sometimes called "ASCII"), in a file ending in
"<code>.txt</code>". Plain text <em>must</em> be broken into lines of
a pleasant length: 70 characters is OK. The line breaks must be in the
form used in <em>Unix</em> and <em>Linux</em> systems, which is
different from <em>Windows</em> and <em>Macintosh</em>. You may use
your favorite text editor to compose text files, translating the line
breaks if necessary. If you don't have a favorite editor, try
<code>emacs</code> or <code>xemacs</code> on a <em>GNU/Linux</em>
system. I think you can use <em>DrScheme</em> to edit text, but it's
not a particularly good text editor for future use..<br><br></li>

<li><em>PostScript</em>, in a file ending in "<code>.ps</code>". Lots
of word processors export <em>PostScript</em>. You can also produce
<em>PostScript</em> with the <em>TeX</em> typesetting
system.<br><br></li>

<li><em>PDF</em>, in a file ending in "<code>.pdf</code>".<br><br></li>

<li><em>DVI</em>, in a file ending in
"<code>.dvi</code>". <em>DVI</em> is the device-independent output of
the <em>TeX</em> typesetting system.<br><br></li>

<li>Standard <em>HTML</em>, in a file ending in
"<code>.html</code>". The buttons on the bottom of class Web pages
provide a way to test whether your <em>HTML</em> satisfies the
standard. I use a variety of Web browsers, but they all display
standard <em>HTML</em>. I will not read nonstandard <em>HTML</em>
files, and the fact that they work on <em>Netscape</em> or
<em>Internet Explorer</em> is irrelevant to me.<br><br></li>

</ol>

I may agree to other formats if you clear them in advance. I will
<em>not</em> agree to secret proprietary formats, such as
<em>Word</em>.<br><br>

Plain text is acceptable for all explanatory files. The readability of
the presentation will affect my comprehension, and therefore your
grade. I award extra points for particularly clear and informative
presentations.</li>

</ol>

<?php echo html_header($HTML_HEADER_LEVEL + 2, "Quality of work"); ?>

<p><strong>All</strong> homework will be judged (except assignment
#0), not as mere evidence that you have written and executed certain
programs, but as an insightful presentation of interesting ideas,
using programs and their executions as part of the presentation.</p>

<p>It is <strong>your</strong> responsibility to execute your programs
on sensible test cases that demonstrate their interesting
qualities. In most of the homeworks for this course, the number of
test cases should be very small. Look for the 2 to 5 examples that
illustrate the appropriate concepts clearly. The choice of examples
may depend on the way you have written your programs, as well as on
the problem that you are solving. Strive for concise clarity, not
volume or cuteness. We will discuss test cases in class as we go
along.</p>

<?php echo html_header($HTML_HEADER_LEVEL + 1, "Autumn 2003 Assignments"); ?>

<b> Assignments will be posted here as they becomes available.  See </b>
<?php echo html_linked_text("<b>last year's homework page</b>", 
			    "http://www.classes.cs.uchicago.edu/classes/archive/2002/fall/12500-1/Homework/"); ?>
<b> to view Autumn 2002 assignments. </b>

<ul>

<li>Assignment #-1, due Friday, 3 October 2003: register and
introduce yourself in the
<?php echo html_linked_text("online discussion", "http://www.classes.cs.uchicago.edu/classes/archive/2003/fall/16100-1/Discussion/phpBB2/") . " "; ?>
as described in my
<?php echo html_linked_text("welcome message", "http://www.classes.cs.uchicago.edu/classes/archive/2003/fall/16100-1/Discussion/phpBB2/viewtopic.php?t=2"); ?>.<br><br></li>

<li><?php echo html_linked_text("Assignment #0", "Asst0/"); ?>,
due Friday, 3 October 2003.<br><br></li>

<li><?php echo html_linked_text("Assignment #1", "Asst1/"); ?>, due
Wednesday, 8 October 2003.<br><br></li>

<li><?php echo html_linked_text("Assignment #2", "Asst2/"); ?>, due
Monday, 13 October 2003.<br><br></li>

<li><?php echo html_linked_text("Assignment #3", "Asst3/"); ?>, due
Wednesday, 22 October 2003.<br><br></li>

<li><?php echo html_linked_text("Assignment #4", "Asst4/"); ?>, due
Wednesday, 29 October 2003.<br><br></li>

</ul>

<?php echo html_header($HTML_HEADER_LEVEL + 1, "Autumn 2003 Project"); ?>

<p>I cooked up a graphical interface for a really bad calculator. All
it can do is add two numbers, mainly because it can't parse any other
sort of expression. When you've finished Assignment #3, you can cut
and paste your much better parser into my code, and you'll have a
pretty boring but not quite so bad calculator, that can evaluate any
expression involving +, -, *, /, ^. Even though you have solved the
problem of parsing applications of the <code>fib</code>, the
evaluation mechanism in the calculator doesn't know how to evaluate
it.</p>

<p>As the quarter progresses, I will fix up the graphical interface a
bit, and you will put a much more powerful sort of evaluation into
it. For now, if you really want to look at it, you'll find the code
below.</p>

<ul>

<li><?php echo html_linked_text("<code>perfectly_accurate_calculator-1,mod1.1.scm</code>",
                                "Project/GUI/perfectly_accurate_calculator-1,mod1.1.scm"); ?><br><br></li>

<li><?php echo html_linked_text("<code>perfectly_accurate_calculator-1,mod1.2-.scm</code>",
                                "Project/GUI/perfectly_accurate_calculator-1,mod1.2-.scm"); ?></li>

</ul>

<?php echo html_footer("index", 0, 1); ?>
<!-- hhmts start -->
Last modified: Thu Oct 23 18:55:47 CDT 2003
<!-- hhmts end -->

</body>

</html>
