This file is at http://www.harold.thimbleby.net/teaching/projects
Harold’s projects are phrased in terms of specific devices and task domains. You are more than welcome to suggest alternative projects to achieve the “same sorts of things” — or your own better ideas. The whole point of this list is to use it to start a conversation with Harold about what you want to do.
Harold will be very happy to talk with people who want to do projects with him that are not (yet) in this list. All the projects here can be adapted to fit your plans and aspirations as closely as possible, and all can be adapted for undergraduates, masters or research projects.
Or, go to my web site, read any paper of mine, and propose a project that takes the paper forwards, or does it better.
Medical apps are becoming very popular, but chaotic. Here are some suggested projects in this exciting area:
The MHRA web site has very complex rules trying to explain medical app regulation. Your project could analyse the regulations and [try to!] organise them into something more easily understood, for instance as a question-and-answer web site. Rigourous thinking (which comes naturally to computer scientists) will undoubtedly find lots of problems, which the MHRA urgently needs to know about.
You could build a new medical app.
We have built some medical apps, and you could contribute to their further development.
Some medical apps — in fact, most of them — are incredibly badly programmed and full of bugs. This aspect of the project could try to find out why (e.g., interview some of the app developers) and try different approaches to help program more reliably.
Literate programming is an idea that has been around a long time. The idea for this project is to make a version of literate programming that would be good for project dissertations, books, manuals and the like.
If you want to have a nice programming project, this project is your friend!
The idea is the markup of your project (in HTML, LaTeX, etc) and your programs will include definitions and uses of macro names, allowing the code to define parts of your project dissertation (including screen shots and other images), and parts of your dissertation to define parts of your programs. Once you've got it going, your project thesis will practically write itself!
Statecharts are a good way to draw interactive systems, but they are not yet an easy way to program them. This project would have you design and implement an API for building statechart-based interactive systems, either in Java or in a statechart-based language you design. The system should include various property checking and analysis features.
How can car radios (or other in-car systems) be made safer? Clearly time-outs are a potential problem (the radio changes its state after a few seconds of user inactivity), but how serious a problem do they pose; are there work-arounds and would they be safer? A rig to use a Panasonic car radio (outside of a car) is available for evaluation in the FIT lab.
This project can evaluate, simulate, improve user interfaces to ticket machines. In particular it could look at alternatives, such as those based on mobile phone registering travellers. An article written by Blandford, Cairns and Thimbleby et al surveys some of the issues — and it was originally criticised by referees for lacking empirical evidence. Can you provide some? Can you do better?
We have some syringe drivers: automatic devices for giving patients repeated injections from syringes (e.g., for a diabetics in intensive care, or for anaesthetics during operations).
What are the HCI issues?
This project could develop new syringes, using Arduinos or other devices, perhaps rebuilding existing syringe drivers, or it could develop into participatory research with the people who use syringe pumps (subject to ethical clearance), with the professionals who use them (some of whom work at the Singleton Hospital), or it could do laboratory usability work, or it could look at user training and manuals, or it could do some reverse engineering to uncover what the syringe pumps really do. There is a lot of scope to improve these things.
The FIT Lab has a touch sensitive rear-projection whiteboard, which very nicely runs this calculator. This project would develop the calculator in any of several directions to make it more successful.
A variation of this project would evaluate the calculator in school classrooms, and might (for suitable students) involve no programming. The calculator is written in Java, and it is envisaged that any work would continue in this language.
PVS is a model checking language and we have built a new tool to make it interactive. Working with Patrick Oladimeji and/or Paolo Masci, there are many opportunities to make this tool more exciting, from improving its user interface, implementing back-end systems, building a repository of case studies, connecting it to other tools, such as YouTube.
When you examine an interactive system (such as an ipod), exactly what is it? You could start to build a FSM simulation of it as you find out how it works, however as you build the FSM you have to keep track of many things — the bits of the system you have explored, the bits that you don't yet understand, the bits you've understood wrongly, and even the bits you want to remember you are surprised at (in case you want to write to Apple!).
A tool to help you manage reverse engineering might make use of the chinese postman algorithm and other algorithms to make reverse engineering systematic.
A typical handheld calculator does not quite do arithmetic. Choose one (or more) and reverse engineer it, and provide a simulation of it. Further work could develop a compiler to explore the limitations of the calculator.
Have a look at http://www.harold.thimbleby.net/calculator or http://www.vcalc.net/curta_simulator_en.htm for a historically interesting example.
Knuth's famous Art of Computer Programming books use various programming notations. Develop a compiler for a language close to his pseudo-English notations; ideally you would compile into MMIX. An important part of the compiler is to achieve the same level of typographic finesse shown in Knuth's books.
MetaPost is a very powerful graphics language that generates PostScript, but it is a completely bizarre language and very difficult to use and learn. Revue requirements for drawing (e.g., from staff around the department, from PhD students), as well as proposed solutions (e.g., object oriented MetaPost, dot, etc), and design and build a system.
Personally, I'd prefer a language that can be used easily from Latex. I'd also like one that can do artistic things, like drawing with nibs or charcoal rather than just those technical constant width lines you get everywhere.
Model checking languages such as Spin (http://spinroot.com/spin/whatispin.html) and SMV can be used to specify and explore interactive devices. Using any such tool (and preferably on OSX), specify and explore the interaction properties of devices such as car radios, mobile phones, MP3 players — or syringe pumps (see related project).
We are building an analysis and simulation tool, MAUI, which can analyse and simulate simple interactive devices. MAUI is written in Java, but there is considerable scope for more work: there are all sorts of analyses that could be added; all sorts of features for designers; all sorts of features to make it more accessible (e.g., generating SVG); and so on.
See http://cs.swan.ac.uk/~csharold/cv/files/cadui-submit.pdf is a good place to start.
Will Thimbleby (a Swansea PhD student, now working for Apple) implemented a new calculator, based on gesture recognition. He has some project ideas for students wishing to work in areas such as handwriting recognition, two-dimensional parsing, zooming/fisheyes for small (e.g., handheld) displays, and so on. (Currently everything is in Java.) He will happily give people demonstrations; email him at will@thimbleby.net
Since he works at Apple, if you want to develop on the iPad (Swift, Objective C etc), that would be advantageous, but you could go down the Android route — or whatever — instead if you like.
Eclipse is an excellent and flexible program development environment. Extend Eclipse to handle warp, or a warp-like idea. See http://www.harold.thimbleby.net/warp/index.html for details, and a Java program to start you off!
Another place to look at is relit, which is a C program I wrote and is available for you to download from GitHub.
You can build your project on top of these programs, or use them to be inspired to do better things!
Hospitals want to improve patient care, and one way to do this would be to find out when and how nurses and others solve problems. There are already systems such as Datix for reporting problems when an incident has already happened, but this app will be to find problems before incidents arise.
This project will design an app for clinicians to easily report solving problems (e.g., somebody found a bed for the patient), and a back-end to provide some sort of overview or statistics (e.g., Ward 3 has lots of bed problems). The app will need to be developed with the NHS, trialled and iteratively designed.
See stuff on regular expressions, as well as the very nice paper Regular-expression derivatives re-examined and web site on the end of yacc.
This project would implement a high-dependability user interface based on some or all of these ideas.
My web site for the book Press On has lots of examples which run in JavaScript, but there are all sorts of ways of extending and developing this. For example, the server side code doesn't work! The images don't work! Think of it as the inspiration for a project, and then finish it off any way you like, with fun programming, etc.
The stable marriage problem is a famous problem: how do you get men and women to marry (i.e., to form pairs) so that everybody is satisfied. Of course “satisfaction” means different things to different people; here it means that no man prefers somebody else’s woman to his own, and no woman prefers another man to her husband. You can find more details on wikipedia, for instance.
When we allocate student projects, we have the same problem — we want all supervisors to be happy with their students, and we want all students to be happy with their supervisors. In addition, students choose projects and sometimes rank them, which makes the problem a bit more complex (for example, you might prefer to change project to have a different supervisor). Also, unlike the real stable marriage problem, supervisors end up with more than one student and sometimes students end up with more than one supervisor!
This project could study this problem theoretically or from its extensive literature, or it could end up with a nice user interface to the University intranet, so students and staff could interact with it.