Search:

Projects

Fall 2017

Older Courses

Spring 2017

Fall 2016

Spring 2016

Fall 2015

Spring 2015

Fall 2014

Spring 2014

Fall 2013

Spring 2013

Fall 2012

Spring 2012

Fall 2011

Spring 2011

Fall 2010

Spring 2010

Fall 2009

Spring 2009

Fall 2008

Spring 2008

Fall 2007

HOWTOs

# Comp4spr15

## Comp4spr15.Comp4spr15 History

May 03, 2015, at 01:02 PM by 192.168.0.12 -
Changed line 55 from:
* [[PS2a]][[PS2b]] Implement a linear feedback shift register (LFSR), and use it to cryptographically encode and decode an image (and learn about unit testing)
to:
* [[PS2a]] [[PS2b]] Implement a linear feedback shift register (LFSR), and use it to cryptographically encode and decode an image (and learn about unit testing)
Changed line 59 from:
* [[PS3a]][[PS3b]] Use Newton's laws and the &#147;leapfrog finite difference approximation&#148; method to create a realistic, animated simulation of planetary motion in our solar system
to:
* [[PS3a]] [[PS3b]] Use Newton's laws and the &#147;leapfrog finite difference approximation&#148; method to create a realistic, animated simulation of planetary motion in our solar system
Changed line 69 from:
* [[PS5a]][[PS5b]] Use a ring buffer to simulate the vibration of a guitar string, using the Karplus-Strong algorithm, and generate a set of audio files to make a computational synthesizer
to:
* [[PS5a]] [[PS5b]] Use a ring buffer to simulate the vibration of a guitar string, using the Karplus-Strong algorithm, and generate a set of audio files to make a computational synthesizer
Changed line 77 from:
* [[PS7a]][[PS7b]] In a partnership with [[Kronos->http://www.kronos.com/]] (Chelmsford, MA), parse large error logs files generated by malfunctioning InTouch devices (their hardware time-clock unit) using regular expression and time-parsing libraries. Note: these log files are not neatly well-formed as is proper XML!
to:
* [[PS7a]] [[PS7b]] In a partnership with [[Kronos->http://www.kronos.com/]] (Chelmsford, MA), parse large error logs files generated by malfunctioning InTouch devices (their hardware time-clock unit) using regular expression and time-parsing libraries. Note: these log files are not neatly well-formed as is proper XML!
March 26, 2015, at 09:43 PM by 192.168.0.12 -
Changed line 4 from:
to:
March 20, 2015, at 06:00 PM by 192.168.0.12 -
Changed lines 26-33 from:
* employ appropriate object-oriented (OO) techniques in C++ in the development of 500+ line programs
* analyze technical specifications for a variety of algorithms, and create working code based on specs provided
* use the Unix shell for C/C++ code development, including use of the gcc compiler and linker tools, and Makefiles
* use the C++ SFML (simple fast media library) for event handling, graphics, animation, and sound
* employ unit testing in your software development process
* use industry-standard C++ API libraries, including Boost (e.g. unit testing, regular expression, and date/time libraries)
* describe the value (and limitations) of coding standards, and use a static style checker to review your own code
* document your work for technical written presentations
to:
# employ appropriate object-oriented (OO) techniques in C++ in the development of 500+ line programs
# analyze technical specifications for a variety of algorithms, and create working code based on specs provided
# use the Unix shell for C/C++ code development, including use of the gcc compiler and linker tools, and Makefiles
# use the C++ SFML (simple fast media library) for event handling, graphics, animation, and sound
# employ unit testing in your software development process
# use industry-standard C++ API libraries, including Boost (e.g. unit testing, regular expression, and date/time libraries)
# describe the value (and limitations) of coding standards, and use a static style checker to review your own code
# document your work for technical written presentations
March 20, 2015, at 02:44 PM by 192.168.0.12 -
Changed line 67 from:
* [[PSX]] (optional assignment) This assignment gives you a chance to resubmit a previous homework (for higher grade.)
to:
* [[PSx]] (optional assignment) This assignment gives you a chance to resubmit a previous homework (for higher grade.)
March 20, 2015, at 02:44 PM by 192.168.0.12 -

* [[PSX]] (optional assignment) This assignment gives you a chance to resubmit a previous homework (for higher grade.)
Changed line 4 from:
to:
->Office hours: W 11a&#150;12p (OS208), R 2p&#150;3p (Olney 524), F 11a&#150;12p (OS208)
Changed lines 6-7 from:
TA: '''tba''' \\
to:
TAs:
->Jing Xu, @@jxu@cs.uml.edu@@. Office hours: T 9:30a&#150;11:30a, Olsen 212A (201 grading)
->Shan (Ivory) Lu, @@slu@cs.uml.edu@@. Office hours: TR 9a&#150;10a, Olsen 212A (202 grading)
->''Note: Any student can meet with either TA.''
Changed line 110 from:
25% Final \\
to:
25% Final portfolio \\
Changed line 5 from:
Section 202: '''Victor Grinberg''' ([[http://cs.uml.edu/~vgrinber|homepage]]), MWF 10a&#150;10:50a, Olsen 311 \\
to:
Section 202: '''Victor Grinberg''' ([[http://www.cs.uml.edu/~vgrinber|homepage]]), MWF 10a&#150;10:50a, Olsen 311 \\
Changed line 5 from:
Section 202: '''Victor Grinberg''' [ [[http://cs.uml.edu/~vgrinber|homepage]] ], MWF 10a&#150;10:50a, Olsen 311 \\
to:
Section 202: '''Victor Grinberg''' ([[http://cs.uml.edu/~vgrinber|homepage]]), MWF 10a&#150;10:50a, Olsen 311 \\
Changed line 5 from:
Section 202: '''Victor Grinberg''' [ [["http://cs.uml.edu/~vgrinber"]] ], MWF 10a&#150;10:50a, Olsen 311 \\
to:
Section 202: '''Victor Grinberg''' [ [[http://cs.uml.edu/~vgrinber|homepage]] ], MWF 10a&#150;10:50a, Olsen 311 \\
Changed line 5 from:
Section 202: '''Victor Grinberg''', MWF 10a&#150;10:50a, Olsen 311 \\
to:
Section 202: '''Victor Grinberg''' [ [["http://cs.uml.edu/~vgrinber"]] ], MWF 10a&#150;10:50a, Olsen 311 \\
Changed line 5 from:
Section 202: '''Victor Ginsberg''', MWF 10a&#150;10:50a, Olsen 311 \\
to:
Section 202: '''Victor Grinberg''', MWF 10a&#150;10:50a, Olsen 311 \\
Changed line 115 from:
We will use Google Groups for class conversation and announcements.
to:
We will use a [[Discussion Group]] for class conversation and announcements. Critical information will be distributed via this list.
Changed lines 83-84 from:
Collectively, these things represent to me what is the most important learning outcome of the course, which is you progressing down your journey of becoming an effective and confident software engineer.
to:
Collectively, these things represent to us what is the most important learning outcome of the course, which is you progressing down your journey of becoming an effective and confident software engineer.
Deleted line 90:
Changed line 119 from:
I will maintain a daily blog of highlights of what happened in class each class meeting. These notes will be recorded in the [[Lecture Blog]] page.
to:
A daily summary of highlights of what happened in class each class meeting will be recorded in the [[Lecture Blog]] page.
Deleted lines 8-11:
!!Text

Materials for this course will provided on this site and in links to other sites. We will not use a textbook.

!!Text

Materials for this course will provided on this site and in links to other sites. We will not use a textbook.
!!Catalog Description

->Advanced C++ programming, which deepens students' understanding of object-oriented analysis and design. Basic software engineering principles and practice, including work with APIs. Topics may include program translation, web software, parsing, and regular expressions.

Deleted lines 30-35:

!!Catalog Description

->Advanced C++ programming, which deepens students' understanding of object-oriented analysis and design. Basic software engineering principles and practice, including work with APIs. Topics may include program translation, web software, parsing, and regular expressions.
Changed lines 4-5 from:
to:
Section 202: '''Victor Ginsberg''', MWF 10a&#150;10:50a, Olsen 311
\\
Changed line 7 from:
Mon/Wed/Fri, 10a &#150; 10:50a, OS503
to:
Changed lines 115-151 from:
We will use Google Groups for class conversation and announcements. Please join this group.

* (easy but then no web access) Enter your preferred email in the box below.

->(:html:)
<table style="border:1px solid #aa0033; font-size:small">
<tr>
<td rowspan=3>
</td>
<td colspan=2 align=center><b>Subscribe to 91-204-201-s15</b></td>
</tr>
<tr>
<td>Email: <input type=text name=email></td>
<td>
<table
<tr>
<td>
<input type=submit name="sub" value="Request">
</td>
</tr>
</table>
</td>
</tr>
</form>
<tr><td colspan=2 align=center>
</td></tr>
</table>
(:htmlend:)

to:
We will use Google Groups for class conversation and announcements.
Changed line 1 from:
[[Comp4spr15|Home]] [[Assignments]] [[Lecture Blog]] [[Resources]] [[http://groups.google.com/group/91-204-202-s15 | Discussion Group]]
to:
[[Comp4spr15|Home]] [[Assignments]] [[Lecture Blog]] [[Resources]] [[Discussion Group]]
Changed line 123 from:
(:html:)
to:
->(:html:)
Changed line 124 from:
<table style="border:1px solid #aa0033; font-size:small" align=left>
to:
<table style="border:1px solid #aa0033; font-size:small">
Changed line 124 from:
<table style="border:1px solid #aa0033; font-size:small" align=center>
to:
<table style="border:1px solid #aa0033; font-size:small" align=left>
Changed line 36 from:
* Best of all, we'll be working through some awesome problem sets developed over the last 15 years at [[Princeton->www.princeton.edu/~cos126/]], led by Robert Sedgewick.
to:
* Best of all, we'll be working through some awesome problem sets developed over the last 15 years at [[Princeton->http://www.princeton.edu/~cos126/]], led by Robert Sedgewick.
Changed line 36 from:
* Best of all, we'll be working through some awesome problem sets developed over the last 15 years at Princeton by Robert Sedgewick.
to:
* Best of all, we'll be working through some awesome problem sets developed over the last 15 years at [[Princeton->www.princeton.edu/~cos126/]], led by Robert Sedgewick.
Changed line 63 from:
* [[PS5a]][[PS5b]] Use a ring buffer to simulate the vibration of a guitar string, using the famous Karplus-Strong algorithm, and generate a set of audio files to make a computational synthesizer
to:
* [[PS5a]][[PS5b]] Use a ring buffer to simulate the vibration of a guitar string, using the Karplus-Strong algorithm, and generate a set of audio files to make a computational synthesizer
Changed lines 153-154 from:
!!Lecture blog and lecture capture
to:
!!Lecture Blog and Capture
Changed line 159 from:
to:
Changed line 161 from:
You are welcome to discuss ideas in the class with your peers, but assignments must be completed individually. You may not look at each others' code, nor allow others to look at your code. If you need to post code on our own course forum for help, or a public forum, do not post more than three lines.
to:
You are welcome to discuss ideas in the class with your peers, but assignments must be completed individually. You may not look at each others' code, nor allow others to look at your code. When posting code on our own course forum for help, or a public forum, do not post more than an individual function.
Changed line 159 from:
to:
Changed line 105 from:
to:
Changed line 75 from:
Based on the [[historical role of Computing IV->History]] in UMass Lowell's computer science curriculum,:
to:
Based on the [[historical role of Computing IV->History]] in UMass Lowell's computer science curriculum:
Changed line 47 from:
* [[PS1]] Use a recursive class definition to draw Sierpinski's triangle, as well as your own original recursive graphic designs (and use a code style checker)
to:
* [[PS1]] Use a recursive class definition to draw Sierpinski's triangle, as well as your own original recursive graphic designs (and learn how to use a code style checker)
Changed line 47 from:
* [[PS1]] Use a recursive class definition to draw Sierpinski's triangle, as well as your own original recursive graphic designs
to:
* [[PS1]] Use a recursive class definition to draw Sierpinski's triangle, as well as your own original recursive graphic designs (and use a code style checker)
Changed line 71 from:
* [[PS7a]][[PS7b]] In a partnership with [[Kronos->http://www.kronos.com/]], (Chelmsford, MA), parse large error logs files generated by malfunctioning InTouch devices (their hardware time-clock unit) using regular expression and time-parsing libraries. Note: these log files are not neatly well-formed as is proper XML!
to:
* [[PS7a]][[PS7b]] In a partnership with [[Kronos->http://www.kronos.com/]] (Chelmsford, MA), parse large error logs files generated by malfunctioning InTouch devices (their hardware time-clock unit) using regular expression and time-parsing libraries. Note: these log files are not neatly well-formed as is proper XML!
Changed lines 79-81 from:
* You will learn how to use some great C++ APIs (not only SFML, but Boost&#151).
* You'll gain practice with critical and useful software engineering practices, including following explicit coding standards, using unit testing and test-driven development, and documenting your work.
to:
* You will learn how to use some great C++ APIs (SFML; Boost).
* You'll gain practice with critical and useful software engineering practices (coding standards, unit testing and test-driven development, and documentation).
Changed lines 97-98 from:
to:
Changed lines 119-120 from:
to:
Changed line 129 from:
<td colspan=2 align=center><b>Subscribe to 91-204-202-s15</b></td>
to:
<td colspan=2 align=center><b>Subscribe to 91-204-201-s15</b></td>
Changed line 131 from:
to:
Changed line 147 from:
to:
Changed lines 155-156 from:
I will strive to maintain a daily blog of highlights of what happened in class each class meeting. These notes will be recorded in the [[Lecture Blog]] page.
to:
I will maintain a daily blog of highlights of what happened in class each class meeting. These notes will be recorded in the [[Lecture Blog]] page.
Changed lines 159-169 from:
!!Collaboration policy

'''Individual work.''' Most assignments must be completed individually. You are welcome to discuss ideas in the class with your peers. You may not look at each others' code, nor allow others to look at your code. If you need to post code on our own course forum for help, or a public forum, do not post more than three lines.

When turning in an individual assignment, you attest that, beyond any starter code I have provided or has been provided in standard API and reference documentation, you are the sole author the code that it includes.

'''Pair programming.''' A few specific assignments may allow pair programming. There will be highly structured rules for these (which are intended to make sure both partners have a substantial learning experience).

This will be discussed later in class, and this document will be updated at that time.

to:

You are welcome to discuss ideas in the class with your peers, but assignments must be completed individually
. You may not look at each others' code, nor allow others to look at your code. If you need to post code on our own course forum for help, or a public forum, do not post more than three lines.

If you received any help on a given assignment, you must discuss this in the assignment README file.

When turning
in an assignment, you attest that, beyond any starter code I have provided or has been provided in standard API and reference documentation, you are the sole author the code that it includes.

Changed line 127 from:
to:
Changed lines 99-100 from:
Assignments will be accepted up to 1 week late with a 50% reduction in that assignment's value. If you fall behind on your homework, it is much better to cut your losses and work on the current assignment, instead of running behind trying to catch up.
to:
Assignments will be accepted up to 1 week late with a 50% reduction in that assignment's value.
Changed lines 103-106 from:
There will be a cumulative final, worth 20% of your overall grade.

Classroom participation is worth 10% of your overall grade. In practice, if
your other grades put you on a marking boundary, this will push it one way or the other.
to:
Instead of a written final, you will create a portfolio of your cumulative semester's work. This large document is 25% of your overall grade.

Changed lines 110-112 from:
20% Final \\
10% Classroom participation \\
to:
25% Final \\
5% Classroom participation \\
Changed lines 152-159 from:
If you do the Google web method, I'd advise setting your preferences to immediate, individual delivery of messages&#151;click the &#147;Edit my membership&#148; tab.

If you do the email method, and you provide an address that's not linked to your Google account, I'll choose those delivery options for you, and then if you don't like it you'll have to ask me to change it, and we'll both be annoyed, so don't do that.

In either case you can send email to the list with [[mailto:91-204-202-s15@googlegroups.com]].

to:
Deleted lines 157-168:

A link to the Echo360 recordings is at the top of the [[Lecture Blog]] page.

Echo360 makes a high quality recording of the classroom's data projector and the instructor's voice.

It also produces a low-resolution recording of the front of the room (i.e., me walking around writing stuff on the white board), and a low-volume capture of student remarks (depending how close to the microphone you're sitting, and how loud you are).

If you arrive at class after 10a, and walk across the front of the room, you'll be captured by the low-res overview cam.

If you're a talker and you're at a decent volume and near a mic, people will be able to hear you on the recording. (They won't see you sitting in your chair&#151;maybe the back of your head if you're at the front of the room.)

If it bothers you that your voice will be captured, and you want to feel comfortable speaking up, please let our TA know and the TA will anonymously refer your concerns to me. We'll set up the captures in a more private way.
Changed line 79 from:
* You will learn how to use some great C++ APIs (not only SFML, but Boost&#151;by the way, we're going to be doing some unit testing stuff).
to:
* You will learn how to use some great C++ APIs (not only SFML, but Boost&#151).
Changed lines 75-76 from:
Based on the [[historical role of Computing IV->History]] in UMass Lowell's computer science curriculum, I predict the following learning outcomes:
to:
Based on the [[historical role of Computing IV->History]] in UMass Lowell's computer science curriculum,:
Changed lines 80-81 from:
* You'll gain practice with the most important thing about documentation, which is: Naming. Stuff. Well.
to:
* You'll gain practice with critical and useful software engineering practices, including following explicit coding standards, using unit testing and test-driven development, and documenting your work.
Changed lines 84-94 from:
Also, I won't be teaching you to use an IDE. You are welcome to use your favorite one, but I won't be requiring their use nor teaching them.

I do hope you all share your favorite development environments with each other
.

When I do stuff with you in class
, you'll be seeing Emacs, the Unix shell, and Makefiles.

Also #2, you're welcome to use your favorite platform (as long as it is one of Linux
, Mac OS X, or Windows).

* I
'll be using Linux. If you don't have a strong preference you should choose that.
* I can provide you with some help for Mac, as long as you're not
using Xcode.
* If you're on Windows, that's fine, but you'll need to turn to your classmates for support.
to:
Also, we will use the Unix shell and Makefiles in your software development. This will be done in a Unix environment&#151;either Linux or Mac. (Linux is recommended unless you are comfortable getting libraries working on your own.)

This is explicit learning outcome of the course
, and it's required. If you're a Windows person, we'll be setting up for Linux development in the first week of the course.

You'll be seeing Emacs
, the Unix shell, and Makefiles. You're welcome to use your own favorite text editor—as long as it's capable of helping you follow the coding standards we'll be using.
Changed line 64 from:
->%height=60px% Attach:guitar.png
to:
->%height=50px% Attach:guitar.png
Changed line 68 from:
->%height=60px% Attach:markov.png
to:
->%height=50px% Attach:markov.png
Changed line 72 from:
->%height=100px% Attach:intouch.jpg
to:
->%height=80px% Attach:intouch.jpg
Changed line 64 from:
->%height=75px% Attach:guitar.png
to:
->%height=60px% Attach:guitar.png
Changed line 68 from:
->%height=75px% Attach:markov.png
to:
->%height=60px% Attach:markov.png
Changed line 64 from:
->%height=100px% Attach:guitar.png
to:
->%height=75px% Attach:guitar.png
Changed line 68 from:
->%height=100px% Attach:markov.png
to:
->%height=75px% Attach:markov.png
Changed lines 71-72 from:
* [[PS7a]][[PS7b]] In a partnership with [[Kronos->http://www.kronos.com/]], (Chelmsford, MA), pars2e0.5 MB error logs generated by malfunctioning InTouch devices, their hardware time-clock unit, and use regular expression and time-parsing libraries. Note: these log files are not neatly well-formed as is proper XML!
->%height=100px% Attach:intouch.png
to:
* [[PS7a]][[PS7b]] In a partnership with [[Kronos->http://www.kronos.com/]], (Chelmsford, MA), parse large error logs files generated by malfunctioning InTouch devices (their hardware time-clock unit) using regular expression and time-parsing libraries. Note: these log files are not neatly well-formed as is proper XML!
->%height=100px% Attach:intouch.jpg
Changed lines 63-69 from:
* Simulating the vibration of a guitar string, with a thing called the &#147;Karplus-Strong algorithm (also not too bad). This will include generating actual audio files and listening to them

Also in a partnership with
[[Kronos->http://www.kronos.com/]], a Chelmsford, MA-based company which happens to be the largest employer of software developers that has its headquarters in MA:

* Parsing 0.5 MB error logs generated by malfunctioning InTouch devices, their hardware time-clock unit. Note: these are not neatly well-formed like proper XML!

Based on the [[historical role of Computing IV
->History]] in UMass Lowell's computer science curriculum, and my hopes/plans for the semester, I shall predict the following learning outcomes:
to:
* [[PS5a]][[PS5b]] Use a ring buffer to simulate the vibration of a guitar string, using the famous Karplus-Strong algorithm, and generate a set of audio files to make a computational synthesizer
->%height=100px% Attach:guitar.png
->[- thanks
[[Princeton->http://www.cs.princeton.edu/courses/archive/fall13/cos126/assignments/guitar.html]]-]

* [[PS6]] Analyze a body of text to build a Markov model, and use that model to generate randomized but plausible text output—a practical implementation of Claude Shannon's classic work on information theory, which is used in many present-day applications, including speech recognition and predictive typing
->%height=100px% Attach:markov.png
->[- thanks [[Princeton->http:
//www.cs.princeton.edu/courses/archive/fall13/cos126/assignments/markov.html]]-]

* [[PS7a]][[PS7b]] In a partnership with [[Kronos->http://www.kronos.com/]], (Chelmsford, MA), pars2e0.5 MB error logs generated by malfunctioning InTouch devices, their hardware time-clock unit, and use regular expression and time-parsing libraries. Note: these log files are not neatly well-formed as is proper XML!
->%height=100px% Attach:intouch.png
->[- thanks [[Kronos->http://www.kronos.com]]-]

Based on the [[historical role of Computing IV->History]] in UMass Lowell's computer science curriculum, I
predict the following learning outcomes:
Changed lines 59-61 from:
* Comparing sequence strings based on their on their &#147;edit distance&#148;&#151;a technique widely used in bioinformatics for DNA analysis

*
to:
* [[PS4]] Compare ASCII strings to compute their &#147;edit distance&#148;&#151;a technique widely used in bioinformatics for DNA analysis&#151;and perform space and time analyses of the dynamic programming algorithm employed in the solution
->%height=100px% Attach:sequence.png
->[- thanks [[Princeton->http://www.cs.princeton.edu/courses/archive/fall13/cos126/assignments/sequence.html]]-]
Changed lines 1-2 from:
[[Comp4spr15|Home]] [[History]] [[Assignments]] [[Lecture Blog]] [[Resources]] [[http://groups.google.com/group/91-204-202-s15 | Discussion Group]]
to:
[[Comp4spr15|Home]] [[Assignments]] [[Lecture Blog]] [[Resources]] [[http://groups.google.com/group/91-204-202-s15 | Discussion Group]]
Changed line 51 from:
* [[PS2]] Implement a linear feedback shift register (LFSR), and use it to cryptographically encode and decode an image (and learn about unit testing)
to:
* [[PS2a]][[PS2b]] Implement a linear feedback shift register (LFSR), and use it to cryptographically encode and decode an image (and learn about unit testing)
Changed line 55 from:
* [[PS3] Use Newton's laws and the &#147;leapfrog finite difference approximation&#148; method (don't worry; it's easy) to create a realistic, animated simulation of planetary motion in our solar system
to:
* [[PS3a]][[PS3b]] Use Newton's laws and the &#147;leapfrog finite difference approximation&#148; method to create a realistic, animated simulation of planetary motion in our solar system
Changed lines 49-50 from:
->[- thanks [[mathisfun.com->http://www.mathisfun.com]]-]
to:
->[- thanks [[mathisfun.com->http://www.mathisfun.com/sierpinski-triangle.html]]-]
Changed lines 55-57 from:
* [[PS3] Use Newton's laws and the &#147;leapfrog finite difference approximation&#148; method (don't worry; it's easy) to create a realistic, animated simulation ofplanetary motion in our solar system
to:
* [[PS3] Use Newton's laws and the &#147;leapfrog finite difference approximation&#148; method (don't worry; it's easy) to create a realistic, animated simulation of planetary motion in our solar system
->%height=100px% Attach:planets.png
->[- thanks [[Princeton->http://www.cs.princeton.edu/courses/archive/fall13/cos126/assignments/nbody.html]]-]
Changed line 53 from:
->[- thanks [[Princeton->http://www.cs.princeton.edu/courses/archive/fall13/cos126/assignments/lfsr.html]]
to:
->[- thanks [[Princeton->http://www.cs.princeton.edu/courses/archive/fall13/cos126/assignments/lfsr.html]]-]
->%height=100px% Attach:lfsr.png %height=100px% Attach:pipe.png %height=100px% Attach:static.png
->[- thanks [[Princeton->http://www.cs.princeton.edu/courses/archive/fall13/cos126/assignments/lfsr.html]]

Changed line 45 from:
-> Attach:sfml-works.png
to:
-> %height=100px% Attach:sfml-works.png
-> Attach:sfml-works.png
* [[PS0]] Learn how to use to events, windows, and animation with the Simple Fast Media Library ([[SFML->http://www.sfml-dev.org/]])
Changed line 44 from:
* [[PS1]] Create a recursive class definition and draw Sierpinski's triangle, as well as your own original recursive graphic designs
to:
* [[PS1]] Use a recursive class definition to draw Sierpinski's triangle, as well as your own original recursive graphic designs
Changed lines 46-49 from:
->[- source: [[mathisfun.com->http://www.mathisfun.com]]-]

* Using Newton's laws of planetary motion and the &#147;leapfrog finite difference approximation&#148; method (don't worry; it's easy) to create a totally realistic simulation of our solar system&#151;complete with live animation
to:
->[- thanks [[mathisfun.com->http://www.mathisfun.com]]-]
* [[PS2]] Implement a linear feedback shift register (LFSR), and use it to cryptographically encode and decode an image (and learn about unit testing)
* [[PS3] Use Newton's laws and the &#147;leapfrog finite difference approximation&#148; method (don't worry; it's easy) to create a realistic, animated simulation ofplanetary motion in our solar system

Changed line 52 from:
* Using a linear feedback shift register to cryptographically encode and decode an image
to:
*
Changed line 46 from:
->[- source: [[mathisfun.com]]-]
to:
->[- source: [[mathisfun.com->http://www.mathisfun.com]]-]
Changed lines 42-46 from:
We will
to:
We will do the following:

* [[PS1]] Create a recursive class definition and draw Sierpinski's triangle, as well as your own original recursive graphic designs
->%height=100px% Attach:sierpinski-triangle-evolution.gif
->[- source: [[mathisfun.com]]-]
Changed lines 27-28 from:
As of Spring 2015, the catalog listing for 91.204 Computing IV [[http://www.uml.edu/Catalog/Courses/undergraduate/91-204.aspx|says]]:
to:
Changed lines 31-45 from:
But this doesn't tell the whole story, because various faculty who have taught / are teaching the course do very different things:

* Prof. Xinwen Fu teaches principles of [[computer vision and practical applications using OpenCV->http://www.cs.uml.edu/~xinwenfu/Classes/91.204.201/91.204.201_Syllabus_SP2013.htm]]
* Prof. Jesse Heines teaches [[XML parsing and language processing->http://abraham.cs.uml.edu/~heines/91.204/91.204-2012-13f/classnotes.jsp]]
* (former UML) Prof. Li Xu taught [[a 6-week module on compiler design->http://dl.acm.org/citation.cfm?id=1121370)]]
* Prof. Bill Moloney used to teach [[how to build a calculator using Lex and Yacc (i.e., parsing and grammars)->https://web.archive.org/web/20010803022749/http://www.cs.uml.edu/~bill/cs204/]]
* Prof. Emeritus Bob Lechner says the course used to be about building a linker (personal conversation)

Probably the only thing that can strongly be claimed about the course throughout the years is &#147;do stuff in C++, &#148; &#147;have the students write lots of code,&#148; and &#147;do cool stuff.&#148; (Of course, this last one depends on one's definition of cool.)

I'd also say that there definitely existed a point in time when having all students learn how to write a linker was absolutely the correct answer.

So, what will be doing in my class this semester?

* We will definitely
be writing lots of code
to:
!! Course Overview

* We will
be writing lots of code
Changed lines 40-43 from:
It's not the usual stuff about using computing to do ever-more complicated things. This is necessary and valuable, but it's kind of self-referential and insular. Dare I say, incenstuous.

Here are some of things we'll be doing:

to:
It's not the usual stuff about using computing to do ever-more complicated things. This is necessary and valuable, but it's kind of self-referential and insular.

We will

Changed line 56 from:
Based on the historical role of the course in UMass Lowell's computer science curriculum, and my hopes/plans for the semester, I shall predict the following learning outcomes:
to:
Based on the [[historical role of Computing IV->History]] in UMass Lowell's computer science curriculum, and my hopes/plans for the semester, I shall predict the following learning outcomes:
Changed lines 1-2 from:
[[Comp4spr15|Home]] [[Assignments]] [[Lecture Blog]] [[Resources]] [[http://groups.google.com/group/91-204-202-s15 | Discussion Group]]
to:
[[Comp4spr15|Home]] [[History]] [[Assignments]] [[Lecture Blog]] [[Resources]] [[http://groups.google.com/group/91-204-202-s15 | Discussion Group]]
Changed lines 6-7 from:
Mon/Wed/Fri, 10a &#150; 10:50a, OS402
to:
Mon/Wed/Fri, 10a &#150; 10:50a, OS503
Changed line 17 from:
* analyze technical specifications for algorithms, and create working code based on specs provided
to:
* analyze technical specifications for a variety of algorithms, and create working code based on specs provided
Changed line 25 from:
!!Rationale
to:
!!Catalog Description
Changed line 19 from:
* use the SFML (simple fast media library) for event handling, graphics, animation, and sound
to:
* use the C++ SFML (simple fast media library) for event handling, graphics, animation, and sound
* analyze technical specifications for algorithms, and create working code based on specs provided
Changed line 16 from:
* employ appropriate OO techniques in C++ in the development of 500+ line programs
to:
* employ appropriate object-oriented (OO) techniques in C++ in the development of 500+ line programs

!!Expected Learning Outcomes

At the end of this course, you will be able to:

* employ appropriate OO techniques in C++ in the development of 500+ line programs
* use the Unix shell for C/C++ code development, including use of the gcc compiler and linker tools, and Makefiles
* use the SFML (simple fast media library) for event handling, graphics, animation, and sound
* employ unit testing in your software development process
* use industry-standard C++ API libraries, including Boost (e.g. unit testing, regular expression, and date/time libraries)
* describe the value (and limitations) of coding standards, and use a static style checker to review your own code
* document your work for technical written presentations
Changed line 5 from:
TA: Bhanu Khausik, bkaushik@cs.uml.edu \\
to:
TA: '''tba''' \\
Changed lines 14-23 from:
As of Spring 2014, the catalog listing for 91.204 Computing IV [[http://www.uml.edu/Catalog/Courses/undergraduate/91-204.aspx|says]]:

->Development of large software projects. Software engineering principles and practice. Object-oriented analysis and design. CASE productivity aids. Development techniques for program-translation software and web software.

This is old, and we'll be shortly revising it to something more like:

->Advanced C++ programming, which deepens students’ understanding of object-oriented analysis and design. Basic software engineering principles and practice, including documentation standards. Principles of large software projects, including work with APIs. Topics may include program translation, web software, parsing, and regular expressions.

But even
this doesn't tell the whole story, because various faculty who have taught / are teaching the course do very different things:
to:
As of Spring 2015, the catalog listing for 91.204 Computing IV [[http://www.uml.edu/Catalog/Courses/undergraduate/91-204.aspx|says]]:

->Advanced C++ programming, which deepens students' understanding of object-oriented analysis and design. Basic software engineering principles and practice, including work with APIs. Topics may include program translation, web software, parsing, and regular expressions.

But
this doesn't tell the whole story, because various faculty who have taught / are teaching the course do very different things:
Deleted lines 29-30:
Now in Spring 2014 though, the course is an oddball in that it's required, but it's allowed to vary a lot based on instructor interests.
Deleted lines 86-88:

''Note:''
->I am aware it is a good teaching practice to announce the dates of in-class exams on the first day of class. I apologize that I am not doing this. It's because I prefer to schedule these exams when I may be away, and I'm not sure of those dates now. I will make sure to give you two weeks' notice for all in-class exames.
[[Comp4spr15|Home]] [[Assignments]] [[Lecture Blog]] [[Resources]] [[http://groups.google.com/group/91-204-202-s15 | Discussion Group]]

91.204.201 Computing IV, Spring 2015 \\
TA: Bhanu Khausik, bkaushik@cs.uml.edu \\
Mon/Wed/Fri, 10a &#150; 10:50a, OS402

!!Text

Materials for this course will provided on this site and in links to other sites. We will not use a textbook.

!!Rationale

As of Spring 2014, the catalog listing for 91.204 Computing IV [[http://www.uml.edu/Catalog/Courses/undergraduate/91-204.aspx|says]]:

->Development of large software projects. Software engineering principles and practice. Object-oriented analysis and design. CASE productivity aids. Development techniques for program-translation software and web software.

This is old, and we'll be shortly revising it to something more like:

->Advanced C++ programming, which deepens students’ understanding of object-oriented analysis and design. Basic software engineering principles and practice, including documentation standards. Principles of large software projects, including work with APIs. Topics may include program translation, web software, parsing, and regular expressions.

But even this doesn't tell the whole story, because various faculty who have taught / are teaching the course do very different things:

* Prof. Xinwen Fu teaches principles of [[computer vision and practical applications using OpenCV->http://www.cs.uml.edu/~xinwenfu/Classes/91.204.201/91.204.201_Syllabus_SP2013.htm]]
* Prof. Jesse Heines teaches [[XML parsing and language processing->http://abraham.cs.uml.edu/~heines/91.204/91.204-2012-13f/classnotes.jsp]]
* (former UML) Prof. Li Xu taught [[a 6-week module on compiler design->http://dl.acm.org/citation.cfm?id=1121370)]]
* Prof. Bill Moloney used to teach [[how to build a calculator using Lex and Yacc (i.e., parsing and grammars)->https://web.archive.org/web/20010803022749/http://www.cs.uml.edu/~bill/cs204/]]
* Prof. Emeritus Bob Lechner says the course used to be about building a linker (personal conversation)

Probably the only thing that can strongly be claimed about the course throughout the years is &#147;do stuff in C++, &#148; &#147;have the students write lots of code,&#148; and &#147;do cool stuff.&#148; (Of course, this last one depends on one's definition of cool.)

I'd also say that there definitely existed a point in time when having all students learn how to write a linker was absolutely the correct answer.

Now in Spring 2014 though, the course is an oddball in that it's required, but it's allowed to vary a lot based on instructor interests.

So, what will be doing in my class this semester?

* We will definitely be writing lots of code
* We will be doing it in C++
* We will be using some pretty cool APIs, including [[SFML->http://sfml-dev.org]], a free, open-source &#147;simple fast media library&#147; for C++, which is available for Mac, Win, and Linux (translation: it's a gaming library)
* Best of all, we'll be working through some awesome problem sets developed over the last 15 years at Princeton by Robert Sedgewick.

The Princeton stuff is great because it's all about how computing connects to the larger world.

It's not the usual stuff about using computing to do ever-more complicated things. This is necessary and valuable, but it's kind of self-referential and insular. Dare I say, incenstuous.

Here are some of things we'll be doing:

* Using Newton's laws of planetary motion and the &#147;leapfrog finite difference approximation&#148; method (don't worry; it's easy) to create a totally realistic simulation of our solar system&#151;complete with live animation

* Comparing sequence strings based on their on their &#147;edit distance&#148;&#151;a technique widely used in bioinformatics for DNA analysis

* Using a linear feedback shift register to cryptographically encode and decode an image

* Simulating the vibration of a guitar string, with a thing called the &#147;Karplus-Strong algorithm (also not too bad). This will include generating actual audio files and listening to them

Also in a partnership with [[Kronos->http://www.kronos.com/]], a Chelmsford, MA-based company which happens to be the largest employer of software developers that has its headquarters in MA:

* Parsing 0.5 MB error logs generated by malfunctioning InTouch devices, their hardware time-clock unit. Note: these are not neatly well-formed like proper XML!

Based on the historical role of the course in UMass Lowell's computer science curriculum, and my hopes/plans for the semester, I shall predict the following learning outcomes:

* You will become much more comfortable writing C++ code and using object-oriented methods.
* You will gain experience architecting solutions to reasonably well-structured problems.
* You will learn how to use some great C++ APIs (not only SFML, but Boost&#151;by the way, we're going to be doing some unit testing stuff).
* You'll gain practice with the most important thing about documentation, which is: Naming. Stuff. Well.

Collectively, these things represent to me what is the most important learning outcome of the course, which is you progressing down your journey of becoming an effective and confident software engineer.

Also, I won't be teaching you to use an IDE. You are welcome to use your favorite one, but I won't be requiring their use nor teaching them.

I do hope you all share your favorite development environments with each other.

When I do stuff with you in class, you'll be seeing Emacs, the Unix shell, and Makefiles.

Also #2, you're welcome to use your favorite platform (as long as it is one of Linux, Mac OS X, or Windows).

* I'll be using Linux. If you don't have a strong preference you should choose that.
* I can provide you with some help for Mac, as long as you're not using Xcode.
* If you're on Windows, that's fine, but you'll need to turn to your classmates for support.

OK, that's the course overview! Now on to some more tactical things.

The class will have regular weekly assignments, which will be graded and returned.

Assignments will be accepted up to 1 week late with a 50% reduction in that assignment's value. If you fall behind on your homework, it is much better to cut your losses and work on the current assignment, instead of running behind trying to catch up.

There will be two in-class exams during the semester. Each is worth 10% of your overall grade.

''Note:''
->I am aware it is a good teaching practice to announce the dates of in-class exams on the first day of class. I apologize that I am not doing this. It's because I prefer to schedule these exams when I may be away, and I'm not sure of those dates now. I will make sure to give you two weeks' notice for all in-class exames.

There will be a cumulative final, worth 20% of your overall grade.

Classroom participation is worth 10% of your overall grade. In practice, if your other grades put you on a marking boundary, this will push it one way or the other.

'''To summarize:'''\\
50% Weekly homeworks \\
20% Two exams \\
20% Final \\
10% Classroom participation \\

!!Discussion Group / E-Mail List

We will use Google Groups for class conversation and announcements. Please join this group.

* (easy but then no web access) Enter your preferred email in the box below.

(:html:)
<table style="border:1px solid #aa0033; font-size:small" align=center>
<tr>
<td rowspan=3>
</td>
<td colspan=2 align=center><b>Subscribe to 91-204-202-s15</b></td>
</tr>
<tr>
<td>Email: <input type=text name=email></td>
<td>
<table
<tr>
<td>
<input type=submit name="sub" value="Request">
</td>
</tr>
</table>
</td>
</tr>
</form>
<tr><td colspan=2 align=center>
</td></tr>
</table>
(:htmlend:)

If you do the Google web method, I'd advise setting your preferences to immediate, individual delivery of messages&#151;click the &#147;Edit my membership&#148; tab.

If you do the email method, and you provide an address that's not linked to your Google account, I'll choose those delivery options for you, and then if you don't like it you'll have to ask me to change it, and we'll both be annoyed, so don't do that.

In either case you can send email to the list with [[mailto:91-204-202-s15@googlegroups.com]].

!!Lecture blog and lecture capture

I will strive to maintain a daily blog of highlights of what happened in class each class meeting. These notes will be recorded in the [[Lecture Blog]] page.

In-class activity will be recorded using the University's Echo360 lecture capture system. This material is intended for your use if you must miss class, or if you want to go over again something that was presented/discussed in class.

A link to the Echo360 recordings is at the top of the [[Lecture Blog]] page.

Echo360 makes a high quality recording of the classroom's data projector and the instructor's voice.

It also produces a low-resolution recording of the front of the room (i.e., me walking around writing stuff on the white board), and a low-volume capture of student remarks (depending how close to the microphone you're sitting, and how loud you are).

If you arrive at class after 10a, and walk across the front of the room, you'll be captured by the low-res overview cam.

If you're a talker and you're at a decent volume and near a mic, people will be able to hear you on the recording. (They won't see you sitting in your chair&#151;maybe the back of your head if you're at the front of the room.)

If it bothers you that your voice will be captured, and you want to feel comfortable speaking up, please let our TA know and the TA will anonymously refer your concerns to me. We'll set up the captures in a more private way.

!!Collaboration policy

'''Individual work.''' Most assignments must be completed individually. You are welcome to discuss ideas in the class with your peers. You may not look at each others' code, nor allow others to look at your code. If you need to post code on our own course forum for help, or a public forum, do not post more than three lines.

When turning in an individual assignment, you attest that, beyond any starter code I have provided or has been provided in standard API and reference documentation, you are the sole author the code that it includes.

'''Pair programming.''' A few specific assignments may allow pair programming. There will be highly structured rules for these (which are intended to make sure both partners have a substantial learning experience).

This will be discussed later in class, and this document will be updated at that time.