Lectures

Lecture Notes for CS351, Fall 2007

This page will house lecture notes, slides, code, URLs, etc., as they become available.

Lecture 01: Aug 21: Introduction; syllabus; topics of the course; philosophy of design; levels of design: principle, pattern, convention, habit/idiom; P1 assigned.
Lecture 02: Aug 23: Progress meter; administrivia: pretest next Tues (Aug 28); philosophy of testing; agile testing; edge and corner cases; testing bugs; getting Eclipse up and running for P1; referencing external jar files; principle: know thy tools; a simple JUnit test suite; demo of the use of the WebGraph object.
Lecture Notes
|Keynote slides| |PDFified slides|
Example Code
|code.jar| |code.tar.gz|
Lecture 03: Aug 28: Progress meter; questions answered; pretest; Quiz 1 (URL and HTMLEditorKit objects) announced; discussion of interfaces; principle of abstraction; principle of centralized definition (Don't Repeat Yourself); examples of interfaces in action.
Lecture Notes
|Keynote slides| |PDFified slides|
Example Code
|code.jar| |code.tar.gz|
Lecture 04: Aug 30: Labor day lab accomodations; design principles behind generics; building generics example codes; advice for crits/code reviews; P1M1 critique.
Lecture Notes
|Keynote slides| |PDFified slides|
Example Code
|code.jar| |code.tar.gz|
Lecture 05: Sep 04: Pretests returned; follow-up on generics: breaking the Java type safety mechanism; the serialization mechanism (very briefly); code critique 2.0.
Lecture Notes
|Keynote slides| |PDFified slides|
Example Code
|code.jar| |code.tar.gz|
Lecture 06: Sep 06: Quiz 1; architecture of Crawler: class diagram and sequence diagram; P1M2 crit (started).
Lecture 07: Sep 11: Q1 returned; reprise of P1M2 crit; Eclipse tip o' the day: quickly building delegator objects; P1M4 architecture discussion.
Lecture Notes
|Keynote slides| |PDFified slides|
Example Code
|code.jar| |code.tar.gz|
Lecture 08: Sep 13: P1M3 crit; thoughts on static.
Lecture Notes
|Keynote slides| |PDFified slides|
Lecture 09: Sep 18: Midterm announced; TopCoder announcement; Static cont'd: static methods, compiler translation and the hidden "this" argument; static initialization; inner classes (static and non); more memory diagrams.
Lecture Notes
|Keynote slides| |PDFified slides|
Lecture 10: Sep 20: Miscellaney: quote 'o the day; JVM class loading process and demo; walk-through of Terran's RobotHandlerTest; garbage handling idiom; P1Rollout walkthrough.
Lecture Notes
|Keynote slides| |PDFified slides|
Example Code
|code.jar| |code.tar.gz|
Lecture 11: Sep 25: P2 handed out; Q&A on P2.
Lecture 12: Sep 27: Eclipse trick: canning repetitive actions; review of design patterns: the callback pattern, functional resource allocation pattern; the Model-View-Controller (MVC) pattern; the listener (observer/observable) pattern; MVC examples.
Lecture Notes
|Keynote slides| |PDFified slides|
Example Code
|code.jar| |code.tar.gz|
Lecture 13: Oct 02: Admin: office hours cancelled on 10/4; Web Weirdness Prize awarded; some info on web structure; discussion of analysis reports; MVC reprised; the DebugLog design.
Lecture Notes
|Keynote slides| |PDFified slides|
Example Code
|code.jar| |code.tar.gz|
Lecture 14: Oct 04: History lesson; Design principle: prefer polymorphism to explicit tests; designing with polymorphic objects; Design pattern: factory methods; factory objects; factory objects in GrellSim.
Lecture Notes
|Keynote slides| |PDFified slides|
Lecture 15: Oct 16: The Chain of Responsibility design pattern.
Lecture Notes
|PDFified slides|
Example Code
|code.jar| |code.tar.gz|
Lecture 16: Oct 18: Security issues: user input validation and SQL injection; Design principle: mimesis; SWING and mimetic design; Threading issues in SWING; SWING gotchas.
Lecture Notes
|Keynote slides| |PDFified slides|
Example Code
|code.jar| |code.tar.gz|
Lecture 17: Oct 23: Hacking hint: micro-experiments; Midterm back; Midterm review: memory diagrams.
Lecture Notes
|Keynote slides| |PDFified slides|
Lecture 18: Oct 25: Quiz 2; P3 handed out; discussion of P3.
Lecture 19: Oct 30: Quiz 2 returned; midterm followup: Q5; micro-testing applied; Java and overloaded method dispatch; more memory diagrams and the internal architecture of dispatch; intro to threads: processes vs threads.
Lecture Notes
|Keynote slides| |PDFified slides|
Example Code
|code.jar| |code.tar.gz|
Lecture 20: Nov 01: Design principle: interface sophistication; intro to synchronization; definitions: critical section, mutex, lock/monitor, enforced vs. advisory mutex; Live action multithreading; the Java synchronized keyword.
Lecture Notes
|Keynote slides| |PDFified slides|
Lecture 21: Nov 06: P3 group assignments finalized; notes on P3 and policy; notes on formal presentations; presentation grading; synchronization: "who owns the lock" excercise.
Lecture Notes
|Keynote slides| |PDFified slides|
Lecture 22: Nov 08: Vision radius in JCiv; multiple definitions of a circle; metric functions; Euclidean vs. Manhattan metric; example circles and balls in the Cartesian plane and on the 2-d grid.
Lecture Notes
|Keynote slides| |PDFified slides|
Lecture 23: Nov 13: Design principle: fail fastness; the Java assert statement; fail fast iterators; caveats. Race conditions: definition; example traces; (many) wrong solutions; how not to implement atomicity in Java.
Lecture Notes
|Keynote slides| |PDFified slides|
Lecture 24: Nov 15: P3M2 delivery: Lone Rangers; serialization gotchas: the object graph; inner classes and serialization.
Lecture Notes
|Keynote slides| |PDFified slides|
Lecture 25: Nov 20: Null Terminators P3M3 delivery; happy Thanksgiving!
Lecture Notes
|Keynote slides| |PDFified slides|
Lecture 26: Nov 27: Thud Muffins P3M3 delivery; communicating/synchronizing from socket listener thread to SWING Event Dispatch Thread (EDT); the SwingUtilities.invokeLater() method.
Lecture Notes
|Keynote slides| |PDFified slides|
Lecture 27: Nov 29: Timer mechanisms: single threaded, multi-threaded, the "wake up Alice" protocol; thread communication (barrier synch) via wait()/ notify(); Reflection; games vs. game engines.
Lecture Notes
|Keynote slides| |PDFified slides|
Example Code
|code.jar| |code.tar.gz|
Lecture 28: Dec 04: Notes on final project: team member evaluations; design exercise: double-dispatching; design exercise: massive multiplayer JCiv.
Lecture Notes
|PDFified slides| |Keynote slides|
Lecture 29: Dec 06: End of the semester! ICES surveys; Java puzzlers.
Lecture Notes
|Keynote slides| |PDFified slides|
Example Code
|code.jar| |code.tar.gz|

Last updated: Fri 07 Dec 2007 07:15:30 AM MST