|
The project will be developed as a community effort. BUT Each student will have his own separate copy of the project. Use
(Even copy) what other people do; At the end of the quarter, I will discuss your version of the system with you privately. you
should be able to explain all of it to me. |
Note that this organization is different from most class projects. Traditionally a class project is divided into separate portions, each of which is the responsibility of a portion of the class. These portions are then combined to create a complete project. In this project, class members contribute code and information that might be useful for completing the project. But in this case, each class member is also the chief architect of his or her own version of the project.
|
A note on grading As indicated in the course syllabus, your grade will be a one (or two) characters letter of recommendation based on the work you do in the course. Two of the primary considerations will be the final product that you produce (see COURSE PROJECT above) and your contributions to the class. Class contributions consist (among other things) of presentations you make to the class, e.g., about libraries that may be useful to the project, patterns, etc., and code that you post and explain. I especially encourage you to write code that you and others can incorporate into your projects. As indicated above, I encourage you to use each others code-- although if you use someone else's code, I want you to understand it. The intent of the course project is that it should be too much work for one person to be expected to do on his own. Yet you are all expected to complete your own version of the project. The way to accomplish this is to share code. Creating code that others can use will be a primary contribution that you can make to the class. I encourage you all to do it. When you develop a feature to be added to the project, post your code on the web site (http://groups.yahoo.com/group/CS390/files) and then explain the new feature in class so that others can add it to their version of the system. Please keep a journal of your class contributions so that you can discuss them with me at the end of the quarter. |
Although we will split these tasks among groups in the class, it is important that everyone in the class stay aware of the full range of issues.
When developing software it is important to think on all levels at once, from the most concrete to the most abstract, even though one is generally working at one specific level at any particular time.
This is the top level of concern.
This is a bottom-level concern. How can we get something actually running, even if it is very simple?
It is important to have something working all the time. Development should not proceed on a big-bang theory: that we work for a long time and then all of a sudden we have a working system. We want to have a working system all the time. As development proceeds, the working system that we have at any moment will be increasingly powerful and sophisticated. But at any moment, we should always have something that works.
First result: http://abbott.calstatela.edu/courses/CS390/CurveBank/SineCosineApplet.html
Everyone should implement at least one of the above features in your copy of the code.
Now that you have your version of the system working with one or more
of the enhancements listed above, it's time to start thinking about
additional features. A number of people have implemented various of
the features above. Add some features that other people wrote
to your version of the system. In addition, here are other capabilities
we may want to include.
Synthetic synesthesia. Synesthesia is a condition in which
a stimulus in one sense modality, e.g., sight, is involuntarily
elicited in another sense modality, e.g., taste. See www.mixsig.net,
www.users.muohio.edu/daysa/synesthesia.html,
and web.mit.edu/synesthesia/www/synesthesia.html
for more information about synesthesia. As wearcam.org/visualfiltersynesthesia.html
points out, synesthesia, can be very useful. In some sense
any GUI is an example of synthetic synesthesia in that it makes
available visually information that is perceived by some virtual
sense. By providing synesthetic options, users of the CurveBank
may be able to understand and remember curves more easily.
The issue for us is to provide ways for users to associate colors
and sounds (and other properties?) with curves or curve features.
For a not-very-satisfying example, see www.well.com/user/smalin/mam.html
in which colors and curves are associated with music. We want
to go in the other direction, i.e., given a curve, allow users to
associate sounds (including music) and or colors with it.
Laws of motion. The MouseWork system includes objects
moving according to very naive laws of motion. It would be useful
to have some more properly fleshed out laws of motion available
as a library.
Building an animation. Developers of CurveBank pages may
want to include some but not all of the features we have investigated.
Can we provide an animator's studio through which a CurveBank
author could point, click, and drag features into an animation and
design the animation layout to suite his taste and needs?
Libraries. Look at your classes and see which of them might
be useful outside your specific organization. For example, do you
have labeled axes, i.e., axes with tick marks and numbers next to
the tick marks? (If not, you should consider adding them.)
Once you have them, it would be a good idea to encapsulate that
capability in a class so that you and others could generate labeled
axes more easily in the future. Are there other classes that might
be useful outside your specific system? If so, consider how you
can make them available.
More Mathematics.
Symbolic differentiation. The rules of basic differentiation
are quite straightforward. Now that we have a parser that
produces a parse tree, it is feasible to write a symbolic differentiator
that takes a mathematical expression and produces an expression
for its derivative. This has been a standard artificial
intelligence exercise for 40 years or more. Having such
a symbolic differentiator available in as a library class might
be quite useful to the CurveBank. If you do a Google search
for "Symbolic differentiation" you will get a number
of references including mitpress.mit.edu/sicp/full-text/sicp/book/node39.html
along with many Lisp homework assignments, including www.cs.utexas.edu/users/novak/asg-symdif.html,
and www.cse.ucsc.edu/~darrell/classes/112/symbdiff.pdf.
Numerical Integration. Symbolic integration is a lot
harder than symbolic differentiation. But numerical integration
is feasible. Here's an applet example, along with the code:
www.mste.uiuc.edu/activity/integration/.
And here's a nice website with lots of animations: archives.math.utk.edu/visual.calculus/4/approx.1/.
Root finding. Simple numerical root finding is also
fairly straightforward if one uses a naive approach. See, for
example, www.efunda.com/math/num_rootfinding/num_rootfinding.cfm.
Integrate and abstract 2D and 3D. We investigated both Java 2D and Java 3D, but we don't yet have a means of integrating them. An integrated version would allow one to develop a model that is independent of the way in which it might be displayed. The user (or developer) could then chose to display that model in either Java2D or Java3D--without changing the model, e.g., by clicking a button or checkbox. More generally, if we had multiple ways of displaying information in a model (see synthetic synesthesia above), it would be useful if the same model could be displayed in any of a number of ways simply by making a selection from a GUI.
Note that the examples file is examples1_6.jar.zip, a .zip file containing a single .jar file. Extract the .jar file from the .zip file. Then open the .jar file with winzip and extract its contents, which are a collection of .java files. Assume you extract the example .java files to a directory called .../CS390/Java3DTutorial/Examples.