U211 F '06
Ofc Hrs


Important Messages from the Instructors

Monday, December 11th, 2006

The End.

Thursday, December 7th, 2006

The grades for the last homework set will appear some time tomorrow (FRIDAY: 12/8) on the server.

Please check all your grades one more time over the weekend. Make sure that all promised corrections are up. If anything looks wrong, see Ryan Culpepper and/or your instructors immediately.

We will determine your final grades early next week. Changing them after that will probably drag on for a while.

Thursday, December 7th, 2006

The printed part of homework 13 is due today (12/7), 5pm, on Carl's desk.

Thursday, December 7th, 2006

Over the past couple of weeks, some of your email has taken up to 12 hours to arrive in our accounts. I had our systems people track this down and they found the following:

We've noticed that one of their mail servers that delivers outgoing mail (they have several) had managed to be listed on one of the Real Time Blacklists as a spammer: ...

This led that server to be treated as a spammer. Their server dealt poorly with the protection we have in place from spam blasts (namely that we only allow one connection at a time from that spammer to go through after being throttled) which potentially could have led to problems with getting mail to us.

It looks like they have since dealt with their listing. Just in case this happens again, we've whitelisted all of the NEU.edu domain. This was something we were initially hesitant to do because we had reason to believe that compromised machines in places like ResNet and other NUnet segments could be used to dump spam on us. Given the recent concerns, we're going to bite the bullet and just whitelist the entire University's network.

If you are a computer science major, I urge you to use your CCS.NEU.EDU mail account to communicate with faculty. The College's mail system isn't without faults but, in my five-year experience, far more reliable than the University's.

Monday, December 4th, 2006

For the stress test in Problem 13.A1, do not use graphs with more than 20-30 nodes and 100-300 edges. Your data representations and algorithms are too naive to do well on anything larger than that.

Sunday, December 3rd, 2006

Here are two clarifications concerning homework problem 13.A1:

  1. To implement the graph interface twice means to develop two data representations and to design the interface functions for both data representations. -- You have seen this before with sets.

    You may wish to give these functions names such as neighbor/1 and neighbor/2.

  2. To design route in a way that "assumes nothing about the construction of the graph" means that the same definition should work for both implementations of the interface. That is, you can use the functions from the graph interface but you may assume nothing else about the graph as you define route. -- Again, you have done so for the implementation of sets.

    You may wish to define two route functions that differ in the names of the interface functions (see above). If you do so, abstract over the two definitions and create one that works for both implementations.

Wednesday, November 29th, 2006

Matthias Felleisen's office hours for Thursday (11/30) are canceled, because he lectures in Olin Shivers's class.

In general: the staff will stop holding office hours this Friday evening. If you have any last-minute questions on Homework 13, see someone before the weekend.

Monday, November 27th, 2006

Concerning exam grades and final grades:
  1. The exam grade is a numeric score and is factored into the overall picture. It gives you an idea of whether you improved, kept up, or slacked off; it is not an indication whether you're a star programmer or not suited for CS. If you did slack off, work on your design skills over the break. CS2 picks up from where CS1 left off; it just uses Java notation instead.

    For disputes about the exam grade, see post from last Wednesday.

  2. The final grade is a composite of exam grades, homework grades, quiz grades and whimsicality [as explained in class]. The weights are explained in the General notes on the course.
  3. To compute the final grade, we compute N candidates grades where N is the number of homework assignments. For each computation, we drop one homework grade. We then take the best possible grade from this bunch as your final grade.
  4. The final score is translated into a letter grade as follows:
    100 ~ 8585 ~ 7070 ~ 6060 ~ 5050 and less
    A B C D F
    P F
  5. There is one final homework assignment left. It will appear on Wednesday.

Tuesday, November 21st, 2006

The rubric for the second exam is available on-line. Before you complain about the grading, you must read and understand the solution. Then you approach the responsible grader (the first solution of each problem mentions the grader for the entire problem, except for problem 5, which was split). If you and the grader can't settle a dispute, the two of you should see your instructor.

Monday, November 20th, 2006

Upon request from several students, the due date of the 11th homework has been postponed to Monday, November 27, 6:00pm.

Thursday, November 16th, 2006

A colleague sent this today:
Grandiose software projects rarely succeed, and when government's involved the long odds get even longer. In the new Baseline, Laton McCartney chronicles the disintegration of the vast, multibillion-dollar project aimed at overhauling England's health system. Four years into the 10-year effort, called the National Program for Information Technology, the original $12 billion budget has already ballooned to at least $24 billion, which is more than it cost to dig the tunnel under the English Channel. Two members of parliament recently wrote that the project "is currently sleepwalking toward disaster. It is far behind schedule. Projected costs have spiraled. Key software systems have little chance of ever working properly. Clinical staff is losing confidence in it."
Nick Carr's column

Tuesday, November 14th, 2006

Several people have sent inquiries concerning the schedule of 211. So here it is in black and white: the second and final midterm is taking place on Monday (11/20) evening; we will be grading the exam on Tuesday (11/21); there is no lab scheduled for that Tuesday; we will hand back the graded exam on Wednesday (11/22); on Tuesday after Thanksgiving (11/28), we will conduct the last lab session and hand back the exams to those who missed the Wednesday (11/21) lecture.

As for grades: while the second exam doesn't seal your fate, the remaining two problem sets and the two remaining quizzes are at most worth some 6% of your final grade. So if you know that you have an average of 0 from the two exams, it'll be too late to get A. Conversely, if you have an average of a 100% from the first ten problem sets, ten quizzes, and two exams, you can't get less than an A anymore. -- The last two weeks are really intended for those students who have understood that "college" is about learning as much as possible and not about getting a grade.

Sunday, November 12th, 2006

Due to a mishap, one of the graders didn't return his batch of graded homework assignments. He will upload them as soon as feasible. To address this mistake, we're extending the deadline for homework 10 by 48 hours. Apologies from the management.

Also, upon request, the language for the homework has been uped to "Intermediate Student Language with lambda".

Friday, November 10th, 2006

The upcoming Tuesday (11/14) lab is canceled. We will run the lab on Tuesday after Thanksgiving (11/28).

Thursday, November 9th, 2006

Joel on Software is a blog/column on "painless software management". Joel is a software consultant, working on large systems. On August 1, 2006 -- just as you were getting ready for your first semester in college he wrote a column entitled "Can your programming language do this", which you can read and enjoy now. If you ever wondered how fundamentals can be useful in your everyday life as a programmer or someone who has to supervise programmers, he provides you with a concrete reason.

Joel also has strong opinions about the education of future programmers. A year ago, he discussed the Perils of JavaSchools to his (wide) audience. Read and reflect on the chances you're getting here at CCIS/Northeastern.

Tuesday, November 7th, 2006

"God created the integers, all the rest is the work of Man."

Leopold Kronecker (Mathematician, 1823-1891)

Oh, and by the way: Even Google has discovered map and reduce (aka fold) by now.

Tuesday, November 7th, 2006

Problem set 10 is now complete. The additional problem A2 is based on problem 9.A2.

Monday, November 6th, 2006

  1. Re-read page 313 in "How to Design Programs."
  2. Deliver your cover page, receipt, and news exercise to Carl's desk by NOON tomorrow.
  3. The code from today's lecture is online now.

Sunday, November 5th, 2006

Homework set 9 was ill-formatted and contained a typo-level mistake in problem A2. I have re-written the problem statements and released them just now.

Tuesday, October 31st, 2006

Turn in your homework 8 cover pager at Christos's desk by tomorrow NOON.

A student raised a question concerning the hand-in instructions of Problem A1 on homework set 8:

You must turn in your marked up copy with the cover page to get any credit for this problem.
Meaning: you and your partner had to choose from which homework set 6 solution you want to start. You must print the marked up solution from the homework server and add it to your cover page, so that the graders know your starting point. Failure to do so will result in 0 points for this problem.

Monday, October 30th, 2006

Dan Gover sent us a wonderful question yesterday, a page long but easily boiled down to

How does one arrange a large program such as the UFO game?
We discussed an answer to this question in class, and even blogged the code, but here is another, general take.

When you design a program that consists of more than a single function (or a couple of them), you proceed in three stages:

  1. You plan the program in a top-down fashion. You design your representation for the world: things that stay the same, things that change. Based on that and the interface to the Operating System in your beloved programming language (world.ss), you also create a wish list of functions. That's your plan.
  2. Then you program, i.e., you design your functions according to the recipe, using the data definition and the wish list. Do it well.
  3. Finally, you must arrange your program so that others can easily figure out what it is about and how to find things (constants, functions, tests, data, etc) in it. Here is how I go about it:
    #| War of the Worlds 
       Matthias Felleisen
       30 October 2006
       Language: Intermediate
       Teachpack: world.ss
       This program implements a "War of the Worlds" ..
       ... a brief (one paragraph) purpose statement .. 
    ;; --------------------------------------------
    ;; Data Definitions 
    ;; -- (global relevance, local go where needed)
    ;; World is (make-world UFO AUP Charges Shots)
    ;; ... 
    ... structure definitions ... 
    ;; data examples are good here: 
    (define WORLD0 ...)
    ;; --------------------------------------------
    ;; World Constants 
    (define WIDTH 800)
    ;; --------------------------------------------
    ;; The Main Function 
    ;; Number -> true
    ;; .. fire tick events at frame-rate fr ..
    (define (main fr)
      (and (big-bang WIDTH HEIGHT (/ 1 fr) WORLD0)
           (on-tick-event world-next)
           (on-key-event world-change)
           (on-mouse-event world-stop)))
    ;; --------------------------------------------
    ;; .. all functions that process worlds ..
    ;; In general: 
    ;; .. functions grouped by data collection ..
    ;; Choose names systematically. 
    ;; LAST: library functions 
    ;; .. (those with many masters) ..
    ;; --------------------------------------------
    ;; TESTS
    ... group all tests together, bottom up,
    ... separated via symbols 
    ;; --------------------------------------------
    (main 28)
Over the next week or two, you will get to know a fourth stage: editing a program. This involves using existing abstractions and inventing additional abstractions to improve your program.

When you organize your thoughts, think of your program as a book. It has chapters and sections. Organizing it well means others can comprehend it. Use "Special | Insert Large Letters" and "Program Contour" for an overview. The "(define ...)" drop-down menu is also helpful to navigate books; it's like an index.

Friday, October 27th, 2006

Your graded homework sets #6 are now available via the homework server. Log in using your username and password. View your graded homework and use the markups to fix it for homework set #8.

Friday, October 27th, 2006

Here is an email from a recent NU/CCIS graduate who found out about PLT Scheme in a junior-level course and created bindings for the Allegro gaming platform:

	From: Jon Rafkind 
	Subject: Beta of game framework
	Date: 	October 27, 2006 1:27:28 AM EDT

I have been working on a simple game framework for
use with my allegro.plt planet package, an
all-in-one media library mostly for writing games
in. The framework removes most of the work in
deciding how to structure a game leaving only the
most basic routines to be coded by the user: logic
and drawing. Its pretty fresh and maybe not that
useful yet but I just wanted to get it out there in
case anyone has any comments.

Planet package: allegro.plt
Documentation: doc.txt
Example game using this: simple.ss

Video of that game: simple.mpg
Or on youtube: www.youtube.com ...

The video playback is choppy because my video
capturing software is cruddy, but on my machine the
game runs very smoothly.

Look for PLaneT. And one of the tutors is working next to Jon as an intern.

Thursday, October 26th, 2006

Turn in your cover page and newsreports at Theo's desk by Friday (10/27) NOON.

On today's lecture:

Programmers are not to be measured by their ingenuity and their logic but by the completeness of their case analysis.

Alan Perlis, Epigram #32:

On tomorrow's homework:

Today in class we designed the function
;; drscheme-junior : AE -> Number
Tomorrow's homework (the HtDP section) is about designing the function
;; drscheme : AE DefWindow -> Number
After all, when drscheme evaluates an expression in the Interactions Window, it also knows about the Definitions Window. The book's exercises help you develop an appropriate data definition for DefWindow.

Tuesday, October 24th, 2006

Carl will swap office hours with Christos on Thursday and Friday (this week only):
  • Carl: Thursday morning, 10:30-12:00am
  • Christos: Friday afternoon, 3:00-4:30pm.

Monday, October 23rd, 2006

The due day for Homework Set 7 has been pushed back to Thursday (10/26).

Friday, October 20th, 2006

As of next week, we will not accept excuses about the homework submission process. Here is some basic advice concerning the process:

Basic advice: Submit early and submit often. There is no penalty for uploading your solution every time you improve it. Do so, just in case something evil happens between your homework and your dog.

The server rejected my homework. It said a line was longer than 79 characters. Make sure all of your lines are 79 characters or shorter and try again.
The server rejected my homework. It said there was an error in my code. Click on RUN before you submit! If DrScheme complains, the server will complain, too. It just will not accept homework that doesn't run cleanly. You shouldn't either.
The server said it timed out running my homework or it uses too much memory. Click on RUN before you submit! Does it finish? Make sure your tests complete. (You may also comment out any calls to big-bang, on-tick-event, etc.)
The server rejected my homework because it was too big. Use smaller images in your program. If you use the same image multiple times, give it a name rather than inserting multiple copies of the image into your definitions window.
I forgot my partner's homework server ID. Your partner is sitting next to you ask him. If he isn't, you are violating your contract. Pair programming means both people working together in the same room at the same computer. -- Failing that, your partner's homework ID should be in your blue book along with everything else you know about him.
I forgot my password. Make an appointment to see Ryan to get it reset. Immediately.

Friday, October 20th, 2006

The rubric for the first exam is now on-line. Even if you have a solid A, I encourage you to read this over. If you do wish to complain about the grading of a problem, you must read the rubric, compare with your solution, and then approach the grader of the problem. If you and the grader don't agree, see an instructor.

Thursday, October 19th, 2006

The cover sheet and news report/summary are due tomorrow at NOON on Dale's desk.

The deadline for homework set 7 has been pushed back to Wednesday, 6pm.

Tuesday, October 17th, 2006

A student asks:

In my game, for instance, I have a function that is called by the success? function that determines if two images have collided. After testing my success? function, I note that there is no red in the helper function, indicating that all branches of the code were tested.

Since the tests all return true, is it necessary for me to still write tests for the helper function, or may I assume that the function works properly based on success?'s behavior?

We answered:

1. You can prove (and you will learn to do so) that this is not enough to cover all possible cases. It's minimal measure of testing. (Good enough for 211, not in general.)

2. For 211, I recommend testing the auxiliaries, too.

3. For a software engineer (with a few years of experience), I expect him to make a judgement call about testing small functions like this or testing them in context only. It's something for which you need experience. Quite a bit.

P.S. You should never test whether two images collided but whether their representations did (are close enough). Images are nothing; the representation is everything.

Tuesday, October 17th, 2006

The second exam will take place on Monday, November 20, 6:30-9:30pm. The General Notes has been updated.

Monday, October 16th, 2006

Lecture 18 (Monday 10/16) on the "worm game" is now on-line. Study it well. We will cover more examples of this kind soon.

Sunday, October 15th, 2006

You may wish to study some of the exams from past CSU211 courses. In general, it is important to keep in mind that the exam is not about getting correct code or repeating knowledge; that's why it is an open-book and open-notes exam.

The key is that you know how to follow the design recipe so that you can solve problems even if you have never before seen anything like it. A specific example concerns lists. A lot of students copy definitions for list-processing programs and tinker with them, until running them in DrScheme seems to solve the problem at hand. While this may get you enough credit for a B- (and a paying job when programmers are in demand), it won't get you an A and it won't make you a good programmer. We want to train programmers well. Hence, be prepared to find data definitions that do not look like any of those you have seen in class. If you can follow the design recipe, you can solve these problems. If you don't understand the process, you won't solve them.

Friday, October 13th, 2006

We have noticed extreme collaboration going on for homework and consider it unhealthy. It is therefore time to amend the General Guidelines of the course. From now on, we will consider all collaborations outside of your assigned partnership cheating and will report it as such to the administration.

Thursday, October 12th, 2006

If you have any conflicts with the exams, you must have made alternative arrangements with your instructor by Friday 6:00pm. Make sure you have a dated email that establishes these arrangements. Otherwise you must take the exam at the specified time.

Wednesday, October 11th, 2006

John Mendelweski and Michael Morgano will hold a last-minute question-and-answers session in the Living-Learning Center (20 Stetson East) on Sunday evening (10/15th) from 7-9pm.

John Mendelweski will not hold his office hours tomorrow (Thursday) evening.

Wednesday, October 11th, 2006

The grading rubric for assignment 5 is now on-line. Study it for the upcoming exam so that you understand how we use the design recipe to grade your homework solutions.

An example of a multi-billion dollar story on software: It sounds too simple to be true. Airbus' A380 megajet is now a full two years behind schedule—and the reason, CEO Christian Streiff admitted on Oct. 3, is that design software used at different Airbus factories wasn't compatible.

See story in Business Week. It is for that reason that future business majors should understand what programming really is and that good programming is not a commodity but a deep, logical and scientific activity.

Monday, October 9th, 2006

Two problems with the homework submission process have come to our attention:

  1. The server will not accept lines that are wider than 80 characters. SOLUTION: Break program lines according to the guidelines that the book displays in every figure. And write concise purpose statements.
  2. The server will not accept homework solutions that are larger than 500Mb. DIAGNOSTIC: An overly large homework solution is usually due to one of two things: your Definitions Window contains large images or your Definitions Window contains the same picture several times. SOLUTION: in the latter and common case, make sure to give the picture a name and use the name instead of the many occurrences of the picture instead. In the former case, find smaller pictures than the one you want to use.

Remember that the homework must be uploaded this week. You must turn in the electronic receipt and the news and a cover page by Wed NOON at Ryan's desk.

Friday, October 6th, 2006

Problem A3 contains a typo in one of the data definitions:

(define-struct txt (content x y))
;; Str = (make-txt Number Number String)

The correct definition is:

(define-struct txt (content x y))
;; Str = (make-txt String Number Number)

I have made up some practice problems concerning structures and data definitions. -- Matthias

Friday, October 6th, 2006


Do not follow the design recipe blindly when you tackle problems. The purpose of the design recipe is to guide your thinking and to focus your efforts on the creative part of the process. Whenever you apply such guidelines blindly, however, you are likely to mess up at some point.

To illustrate this effect, I include always include at least one problem with the fifth week problem set that leads to a dead-end if you don't think before you apply the design recipe. And yes, this year's problem set contains one of those problems, too.

Do not forget the guidelines. We rarely mention them in class because the in-class problems are "one task" problems. Homework problems, however, go beyond such simple stuff.

In short, think first then use guidelines.

Wednesday, October 4th, 2006

Some of you approached TAs with problems in understanding the material. After watching some of these interactions, I have made up some practice exercises on designing "atomic" functions on "atomic" data and I know that at least one third of you should do those as soon as possible.

Wednesday, October 4th, 2006

The signature exercise didn't go as well as we had hoped. So we have dropped it from this week's grading rubric and add it, in revised form, to next Tuesday's homework assignment.

Monday, October 2nd, 2006

Today, Christos is collecting the homework solutions of the week. You can turn in your homework until 6pm.

Monday, September 25th, 2006

This coming week Erin McLaughlin will hold her "Tu 5:30-7:00pm" office hour on Wednesday from 4:30-6:00pm.

Carl Eastlund is responsible for today's homework assignments. He won't accept solutions after 5pm.

The code from today's lecture is available on-line.

Friday, September 22nd, 2006

When the teaching assistants grade your news summary, they will evaluate one of the following three aspects of your writing:
  • typos: they will mark every typo up to some number, say 5, and if your summary has more typos than that, you get a 0.
  • sentence-level problems: they will look for incomplete sentences, missing nouns, verbs, articles, bad word order, etc. Again, if they find too many of those, they will stop reading and cross out the rest.
  • paragraph organization: does your paragraph have a thesis? do the remaining sentences support the thesis? is there a natural transition from sentence to sentence (old-new rule)?
We will use one of these three rules per week, and we will rotate through them over the course of the semester. If a TA is generous, he may mark up additional problems as he sees fit but this won't affect your grade.

Thursday, September 21st, 2006

Someone writes:

"I was looking over the homework for Fundimentals, and wanted to know if we had to do all six steps for each of the problems in our homework."
The answers are "Yes!" and "Absolutely!" and "You better get used to it." and "Think of this as finger exercises in piano lessons" because in a week or two, you won't be able to solve the problems at all if you don't get in the habit of following the design recipe now.

Starting next week, the CSU 212 lab sessions will also use short quizzes to test your preparedness. These quizzes will cover lecture material.

Wednesday, September 20th, 2006

During Olin's and my absence, the second section of the class covered a bit more ground than the first, especially covering Cartesian points/structs:
  • develop a function that measures the "Manhattan distance" to the origin. In Manhattan, you can only walk square blocks. So a house at 3rd street and 10th avenue is 13 blocks away from the origin of Manhattan (and that is?).
  • develop a function that measures the Euclidean distance to the origin. See HtDP and instances of posn. Given a point (x,y), its Euclidean distance to the origin is measured as the square root of the sum of the squares of x and y. (This follows from Pythagoras's law concerning rectangular triangles. Why?) Look up square in HelpDesk.
  • develop a function that measures the distance between two Cartesian points. For good practice, develop two versions: one that uses just primitive operations and another one that uses the "distance to origin" from the previous bullet.
Recall the structure definition:
(define-struct cartesian (x y))
The constructor function make-cartesian is always applied to numbers.

Wednesday, December 31st, 1969

The sentence "Formulate the formulas from Problems 2, 3, and 4 on Set 1 as Scheme programs." in Problem A1 on Problem Set 2 should have read "Formulate the formulas from Problems 2 and 3 on Set 1 as Scheme programs." In other words, you do not have to create a program for Problem 1(4).

Wednesday, December 31st, 1969

Your lab partner is your homework partner. You will solve all problems jointly: programming and writing up the news summary.

You and your partner may ask others a question or two as you are solving your problems. If you do so, list their names on the "credits page" (cover).

Do NOT solve the problems in a big large group of 20 people. Do NOT turn in a copy of someone else's solution. Even if we don't catch you, I promise you will fail the course.

Wednesday, December 31st, 1969

This could be a bit over your head, but hey, it's never too late to get inspired!
Biology-Inspired Agile Autonomous Micro Air Vehicle Research
Johnny Evers
September 20, 2006 at 11:30 - 1:00 @ 333 Curry Student Center

The demonstrated effectiveness of UAVs in combat motivates us to consider the development of a much smaller class of UAVs, so called micro air vehicles (MAVs), that would be capable of autonomous operation in confined airspace such as urban canyons or forest edges. As engineers, we naturally look to precedent for the development of new capabilities and we find an almost endless number of potential analogs for MAVs in living bats, birds, and insects. Among the more obvious technology challenges, we find that our training as engineers, emphasizing construction of systems from the interface of distinct functional components, presents a barrier to developing an understanding of biological flight appropriate to the development of new design concepts for MAVs. This lack of understanding cuts both ways: biologists are trained in scientific inquiry rather than engineering design and, therefore, often do not appreciate engineering approaches. So we first have to answer the question "How do we facilitate a productive dialogue with biologists?" before we can broach the "What can we learn from biology?" question.

In this talk, I will attempt to present a vision, somewhat personal, on how engineers and biologists can collaborate on leveraging an understanding of bats, birds, and insects to develop new classes of MAVs with unprecedented autonomous aerial agility. I will highlight several interdisciplinary research projects which I believe are demonstrating successful approaches to biology-inspired engineering. Finally, I will suggest several areas of research that will particularly benefit from an interdisciplinary approach.

Wednesday, December 31st, 1969

Welcome to the fall 2006 edition of CSU211 and to my co-instructor, Olin Shivers, who has just joined the Northeastern University Programming Research Lab.

last updated on Sat May 30 14:15:17 EDT 2009generated with PLT Scheme