Ideas for Projects ------------------ (This is the same document that was distributed to the class mailing list early in the semester -- it applies equally well to projects 3 and 4. Note also that you may get C programming project ideas from the CCS114 materials that were distributed in class -- these are also available on my door.) NOTE: These are only suggestions! Do not feel compelled to work on these particular ideas. Feel free to work on an idea of your own -- also feel free to bounce any ideas off of me (preferably by e-mail). NOTE ALSO: Some of you have very little prior computing experience and some of you have lots of prior computing experience. If one of these ideas looks interesting but too ambitious, feel free to work on a much simpler version of the idea. If you've never written any sort of program before, then just getting ANY C program to run is a significant accomplishment -- I understand this and will take your background into account. If, on the other hand, one of these ideas looks interesting but too simple, feel free to make it more complex/interesting as you see fit! SOME GENERAL COMMENTS: Programs should be well documented. Papers should be well structured and carefully written. In particular, every paper should include a brief introduction and overview at the beginning and a brief summary and/or set of conclusions at the end. Every paper should also include REFERENCES to the literature that you consulted in refining your ideas. Some ideas: Read "The Tinkertoy Computer" by Dewdney and write a paper describing a design for a computer made out of some different sort of 'stuff.' Show how one could prove that your computer is a "universal machine." Write a paper on the in-principle possibility of truly creative art-making programs. Do you believe that Boden's classification of the issues is helpful? Can you find a significant flaw in one of her arguments? Write a program (in C or any other language) that generates random but grammatically well-formed sentences. Suggest or make extensions to produce rhymes, particular rhythms, or meanings centered on particular topics. Be sure to include a short English description of what the program does and of how one should use it. Write a program (in C or any other language) that generates random but musically reasonable melodies. You will first need to devise an output format -- perhaps your program will generate strings like "Aq C#e Ebw", which might mean "an A quarter note, followed by a C-sharp eighth note, followed by an E-flat whole note." Suggest or make extensions to produce melodies that stay within particular keys, that conform to particular rhythmic constraints, or that make other specific kinds of musical "sense." Be sure to include a short English description of what the program does and of how one should use it. Write a paper that compares two operating systems along several dimensions (e.g., their file systems, their user interfaces, their multitasking capabilities) and propose a new operating system that combines the best features of both. Point out situations in which the best features might not be compatible with one another, and propose ways to deal with such situations. Write a program (in C or any other language) that generates random dialogs with reasonable "emotional flow." All of the sentences in the dialog may be "canned" sentences that are hardcoded into the program, but the program should be capable of producing a wide range of different sequences. Each sequence should have some emotional "logic" -- for example, perhaps insults should be followed only by retorts. Include a page or two of commentary that indicates how far you think this could be carried. Create a web page (using HTML) that re-presents some of the information covered in class so far. Add JavaScript code or Java applets to provide interactive demonstrations for one or more of the topics. Use the LogicSim circuit simulator to build a complex digital circuit. Submit both the LogicSim file for the circuit and a short paper that describes what you were trying to implement and the strategy that you used. You may get ideas from books on digital circuit design that you find in the library. (Include any such references in your paper.)