
The following are possible semester-long projects which you can undertake as part of CS102. You are free to choose one of these or suggest your own project, however, you must obtain your instructor's permission before starting. All projects are to be implemented in Java, either as stand-alone applications or Internet-based programs using, for example, Java Server Pages, or even mobile applications. Projects will be undertaken in groups of four students (who must all be from the same section.) As far as possible, the projects themselves should be unique within each section. The descriptions below are deliberately short, we are looking for creativity! We also expect you to demonstrate independent learning skills by finding out about and using things not explicitly covered in the course (for example, networking, databases, etc.) Do not allow your current programming ability to affect your choice of project; you can do anything you want to, if you put your mind to it.
Note: You might also consider writing software to support some aspect of your courses. Ask your teachers if there is anything they would like. Having a real customer provides an excellent incentive! Another, more challenging, option would be to add some new functionality to an open source project!
Mobile applications for Android OS.
Meeting Organiser: Web-based, this program would allow individuals to collaboratively arrange the most suitable meeting time, by having each specify their preferences for the various options.
Group Organiser: A web-based program that would allow user communities to collaboratively divide themselves up into groups that will then do specific tasks (which may also be decided in the tool.) Such a tool could be used for CS102 project group selection/organisation, for example.
Pseudo-code Algorithm Designer: To support student learning in CS101. It should provide a means to quickly and easily set out and edit a proposed algorithmic solution to a problem. It should enable users to identify data requirements and to manually step through (execute) the algorithm to better understand its logic. Ideally, it should provide help and advice, and be able to output a skeleton Java code with the algorithm included as comments.
Tag Generator: Tags are now commonly attached to all sorts of things, including photos, documents, emails, etc. This is all well and good, but which tags are the most appropriate to use? Automated help in selecting/suggesting tags for various media types may form the basis of a sophisticated document storage and retrieval system.
Internet-based fun: A program that allows users to take images from one of the online services, such as Flickr, and use them as parts of a game. A simple idea would be a spot-the-difference game, whereby users added slightly modified patches over the photo and then challenged other users to spot them. Even better, add little animated image sequences to various parts of the image. For example, clicking on a rock on a beach might cause it to lift up and a crab appear and ask why you were disturbing its slumber!
Internet-based Card Service: Ok, so it has been done before, but I am sure you could certainly improve on them. For example, allow the user to change not only the text (their own and/or stock texts), but also the images, perhaps, including their own photos from Flickr or similar services. Users could have complete control over the card design & layout in much the same way as they could using PowerPoint or PhotoShop on their own machines. And why not include a reminder service to make sure they don't ever miss friends & families birthdays, anniversaries, etc.
GUI Sketcher: Allow anyone to quickly and easily sketch out a GUI and demonstrate its interaction. Most current tools provide a static view, but what would be really nice would be a facility to produce a slideshow-like sequence showing what would happen when the user chose various options. Ideally, it would be able to generate much of the interface code automatically (which would then require only additional calls to the actual data/model.) Even more ambitious, could it generate code in Java, in PHP, ASP.NET, and even HTML!
Question Bank: Program that allows teachers to maintain collections of questions for a course, and to find suitable ones from it for quizzes and exams. Consider cataloguing questions by the knowledge/skill required to correctly answer them. Maintain a separate map of knowledge comprising a particular topic, then for each student keep track of which topics they are proficient at based on their answers.
Young Learner Game: Mobile phones with cameras are now common-place, so how about a game that uses this amazing technology. A hi-tech version of an old favourite might be really neat. The basic idea is to have a "book" with a particular theme (animals, birds, traffic signs, etc.) which challenges players to find examples of the various concepts it depicts. When they see one they photograph it and add it to the book, which not only provides proof, but also acts as a sort of journal. Great fun and, dare we say it, educational! Social aspects too?
Electronic Journals: Keeping journals, diaries, or portfolios is a common task so how about providing electronic support for it? Maybe next year's CS101/CS102 students could use your program!
Penny Football: A cross between snooker and pin-ball, two teams of 5 coins each of which can be "flicked" to "kick" another smaller "ball" coin into the goal area. Extra pins form obstacles that interfere with play! Another game that offers endless opportunities for using your imagination, whether single-user or internet-based.
Survey Master: Software to allow anyone to setup, run and analyse a survey on the Internet. Conceptually simple, but making something which is both flexible and easy to use is an interesting challenge.
Research Assistant: Enter all your notes, references, ideas, etc. from any internet connected device. Provide the means to automatically and/or manually organised them, plus various ways to retrieve and present them. Imagine being able to produce an outline essay from your notes at the click of a button! And what additional benefits might ensue if people shared the system, pooling their notes and being able to comment on and add to each others work.
Web-cam fun: Digital video input is now readily available and you have probably seen many applications that use it, including detecting and recording intruders, automatically reading the license plates on speeding vehicles, tracking moving objects, and identification for security purposes. Using a web-cam as an input device that replaces or compliments the keyboard and mouse is another possibility, and might allow the computer to infer user-state information, such as presence, boredom, frustration, etc. And, how about using it for artistic purposes? As the user moves their arms, body or head, the screen might "paint" differing patterns or generate musical rhythms. A multi-person version, which tracks a group of people around a room might prove even more interesting! Note: Anyone interested in these art-related projects might be consider joining in a new research group we are forming with colleagues in the Arts Faculty.
Conversation program to pass Turing Test: All you have to do is write a program that can carry on a conversation with anyone who happens by, yet is so good that they cannot be sure whether they are conversing with a program or not. Serious fun this with big money at stake if you can do it right!
Timeline bean: Java bean that can be used in other projects to provide a timeline display with both text and graphics clickable labels. Can be used to show trends in history, philosophy, sociology, and even physics experiments. Should be able to handle rough dates as well as show relationships between elements.
Map bean: Another Java bean component designed to provide a simple-to-use mechanism for the display of 2D data (be it geographic or not!) which allows the user to interact with it.
Recommender System: Now in use at various internet sites, recommender systems try to identify and automatically suggest books, films, websites, etc., that you might be interested in based on your preferences, and knowledge of other similar users and ratings given to the products by them. There are several ways accomplish this and part of the project requires doing a bit of research into these before implementing your own system. You might get your program to suggest jokes, music, bookmarks, news items, tips, and even poems and stories. I am particularly interested in systems where there is a continual stream of new products and it is important to rate them quickly and accurately. To this end it may be interesting to consider rating the sources of information and the raters themselves too.
Maintained by David Davenport (email).