Potential CA3/4 Projects

These are rough ideas; they are intended as starting points for ideas that you may develop yourself.

Computing Forensic Projects

  1. Online Learning

    Online learning is becoming very popular and one interesting idea is to develop online tests. A problem with normal online tests is that users do the test and then know the answer and therefore can't do the test again if they want to improve their mark. Dynamic tests allow a question to be generated to suit a particular student and mark that student. If the student does the test again, the program will give them a completely new question and mark it appropriately. This project would be to develop a framework which allows these dynamic questions to be created and marked and enable a lecturer to easily create these questions. It is envisaged that this program would be written in Java and use dynamic loading of class files for the questions. Students attempting this project should be competent programmers.

  2. GPS Antics

    There are a potential few projects involving GPS devices, e.g.

  3. Solitaire Solved

    Using AI and heuristics, write a program to solve the game solitaire. Here are some more details

  4. Voice powered Programming

    Write a programming editor which can be controlled by voice. It should include support for common programming activities (such as indentation and brace matching). If you are writing this in Java, you should use the Java voice API.

  5. Text Reader

    Develop a program that will take a standard Ebook and speak it out using a voice synthesiser. It should present chanpter information properly and allow you to easily move back and forward in the book. Incorporate voice recognition to make it easier to move about the text.

  6. Style Sheet Filter

    A style sheet allows the same web page to appear differently based on the contents of the style sheet. A servlet filter allows a web page to be processed on the fly (e.g. to change the particular style sheet that is used. Combine filters and style sheet to allow users to specify the way they would like their web pages presented. There should be a friendly way to develop the style sheet and they should be able to specify the url of any style sheet.

    How does the filter know which page requires which style sheet: the filter takes a url such as index.myStyleSheet.html and actually accesses index.html with a style sheet called myStyleSheet.css (in otherwords, 'index.html' is modified on the fly). All local links in the document are modified to the new version of the link (i.e. so they also use the style sheet). This is also processed dynamically. * Registered users can create new style sheets by modifying the existing style sheets (via web based forms) These style sheets are then available to the web browsing public.

  7. Forensic Disk Analysis

    During the investigation of computer crime, computer disks often need to be analysed. This project would help to analyse disks. The program would display the various parts of a disk, the boot sector, the File Allocation Table and the File Area. There would be a analysis section which would help investigators to discover data which had been hidden.

  8. See the Objects!

    Build a graphical viewer that models object creation and interaction in a running Java program.

    This would allow you to see how the objects of your program interacted. A user of this project would run a Java program and be able to see how the objects interacted; which objects created other objects; where objects were created and destroyed. The project would be able to display the dynamics of a running Java program at the object level.

    The project would be especially useful to researchers in Design Patterns (google it). The project would be developed in Java, using Java 3D for the graphics (and optionally Java sound for effects) and would use the debugging API to interact with a running Java program.

  9. MIDI API for educational use

    API = Application Programmers Interface; MIDI = Musical Instrument Device Interface (or someat like that).

    The CA165 computing course used a graphics library to make it easier to access Java graphics facilities. The idea was to stimulate the students. Sound and Music might also interest students. The idea of this project would be to create a corresponding library to make it easier to access the sound API in Java. This would allow students to use the sound facilities of the without getting bogged down in the details of generating MIDI.

    The project should also include example programs to demonstrate the API.

  10. Course Management system

    A Web-based course consists of a set of related concepts with prerequisites etc. Have a system whereby given such a course, a lecturer can rearrange elements of a course and map them onto a timetable.

    There would be a gui front end to map course elements onto a semester timetable. Once the data is stored, a Java servlet would present it appropriately to students.

    The course database would consist of directories of slides, mpeg files, html files, links to external resources, discussion fora, etc.

    See me for an explanation of the Jargon.

  11. Statistical Java Applet

    Write a Java Applet that takes parameters of a distribution and plots probability density functions. Ideally it would parse general equations and be able to plot them, and also be able to plot if required a series of data.
    See Gary Keogh for more information.

  12. Outliner

    Write a Java applet that reads a properly structured HTML file and generates an outline view based on the headers of the file.

    The applet should allow the user to expand and contract sections of the outline in a manner similar to the way Windows file explorer does for directories. It would also be useful to provide a utility to convert an MSWord document into an outline HTML document (i.e. only headers and lists would have to be translated). The applet could then handle Word documents as well.

  13. Program Style Checker

    Write a java application that can parse a C++ or Java program and identify if it is indented to a specific style.

  14. C++ Program checker

    Java had a number of small improvements to C++ (as well as a number of big ones). These include

    1. Insisting that a boolean value or expression be used in a conditional test e.g. if(x) becomes if(x != 0).
    2. The comma operator has been removed, so you can't write the compile nonsense while(i=0, i<10, i++).
    3. You cannot use uninitialised variables.

    Write a Java program that parses a C++ program and identifies if it breaks any of the above rules.

  15. D6 Emulator for the Palm Pilot

    Write a D6 Emulator for the Palm Pilot.

  16. Flowchart Animator

    A previous CA3 project, took as input a Java Program and animated it. A user would see the source code and variables, and observe the execution of the program in slow motion. Another interesting project would represent a program with a flowchart and allow a user to see the animated flowchart representation.
    I.e. the analysed code will be represented by a flowchart, and as the code is animated, the flow of the program is demonstrated using the flowchart.
    It is anticipated that the project would be written in Java and could execute as an Applet or an application.

  17. Web File Explorer

    Normally you can only see a web site a page at a time. The idea of this project is that you could point your explorer at a web site and it would work out the directory structure of the web site and allow you to explore the files as you would your own file system. This would also allow you to copy all or part of the file structure of a remote web site should you so wish.

    The Web File Explorer would use the http protocol to get details of files. It would initialy explore the site by downloading pages and using recursive algorithms to build up a representation of the files and directories and then present them in a standard tree like structure.

    The project would use Mime types to allow a user to activate appropriate programs for the different types of files.

    A variation on this project would be to represent the web site as a graph of links between pages; to display the graph and to allow a user to browse the web site in this way.

  18. Build a backup tool

    The idea is to build a tool that will compare two direcotries and copy older files to a backup directory.

    The program should be able to:

    Two other optional features

    Collect a set of MD5 values and compare these against a list of actual files. This could be useful to (e.g.) ensure your system files have not being contaminated. (Look up linux rootkit on google.)

    Use md5 to detect duplicate files on the disk. (Duplicate files a disaster for document organisation!).

    This program would be very useful if the User Interface is well thought out.

  19. Soccer Organiser

    A programmer wants to organise soccer games between a group of programmers at a different companies. This is much trickier than it seems; someone thinks of a date/time and emails everyone. They all reply saying if they are available or not. If not enough players are available; the organiser must come up with a new time and send out more emails, which can go on indefinitely.

    A better solution would be if a web page presented various nights that the pitch was available and players could indicate which nights they were free to play. The program would then choose a night when enough players were free and (automatically) email all players to indicate which night had been selected and who was playing. The program should also be able to substitutes; i.e. if a player can't make it; they notify the system, which then emails potential substitutes. The first substitute who registers gets the place.

    Ideally the system could be extended to handle other games/meetings.

  20. Family Tree Organiser

    Create a Web application that would allow a group of people to create a family tree. It should be possible for any of the group to:

    1. add new members to the family tree.
    2. add information (e.g. pictures/text) about any member in the family tree.
    3. join two preexisting family trees together (if appropriate).
    4. easily create links between stories/pictures; e.g. dynamically create an image map that would allow clicking on a picture brin you directly to a member's link.