ECE 3574 Fall 2018 - Semester Project
Each semester I develop a project that requires you to use many of the design patterns and APIs discussed in class. This is where much of your learning occurs. The project for this semester is a notebook-style interpreter of a language we will call Plot Script. It will allow the user to enter blocks of code that is displayed with interleaved output such as numerical results and plots -- similar to, but much less complex than, systems like Mathematica and Jupyter. The heart of the application is the kernel, a tree-walking interpreter that accepts input in Plot Script and produces output resulting from execution of the script.
You will be given starter code that implements a base version of Plot Script, documented here. You are free to modify this code however needed or even discard it all together. As the semester progresses you will gradually modify and extend it through a series of milestones.
- Milestone 0: In this milestone you will familiarize yourself with Plot Script, the starter code implementing the interpreter, and how to build and run its tests on your host machine as well as the reference environment. You will add a complex numerical type to the language and implement related numerical procedures.
- Milestone 1: In this milestone you will extend the system to add a list type, lambda functions (user defined procedures), and relevent built-in procedures to the Plot Script language. You will also extend the test suite to cover the code thus far.
- Milestone 2: In this milestone you will develop a prototype interface to the notebook and extend Plot Script to add built-in support for graphics primitives, rendered using Qt.
- Milestone 3: In this milestone you will develop the final notebook interface using Qt, implementing the plotting functionality.
- Milestone 4: In this last milestone you will develop the final version of the application using a seperate thread for the corresponding interpreter kernel.
The milestones will be used for grading (see the syllabus) and thus are motivation to not procrastinate. They correspond roughly to the schedule of material that we will be covering in class with due dates spaced throughout the semester. Your project final version will be due on December 5th and evaluated based on the milestone 4 functionality.
Your progress will be tracked through a version control system (see meeting 2). It is important that you complete each milestone, even if after the due date, as they build on one another and you will not be given solutions to earlier milestones.
Grading
There are 45 course percentage points allocated to the final project.
Correctness Tests
|
25 points
|
Testing
|
10 points
|
Code Quality
|
5 points
|
Good Development Practices
|
5 points
|
Grading Notes:
- If your code does not build in the reference environment you will receive no points.
- Correctness is determined by the proportion of instructor tests that pass from each milestone (5 points each).
- Testing includes both unit test coverage and completeness of NotebookApp functional tests. Unit test coverage can be determined in the reference environment using the procedure in Milestone 1.
- Code quality means your code compiles with no warnings at a high-warning level (STRICT in the reference environment) and your unit tests have no memory leaks, as well as other criteria mentioned in class (function length, variable naming, etc).
- Good development practices is assessed by looking for regular, incremental, and well-packaged commits.