This page collects a selection of ideas for projects that might be of interest to Bachelor's, Master's and doctoral students. Many of them could be of interest to research collaborators in general.
Warning: these are almost all challenging and research-oriented project ideas. I certainly don't want to discourage anyone by saying that. But they do require a strong student with a the right mix of practical skill, self-management ability and determination. (Students: these are skills you learn by challenging yourself! So if any of them interests you, you are very much encouraged to take on the challenge....)
Despite all being somewhere on the challenging side, they do vary a fair bit difficulty. They also vary in bakedness (i.e. how much I've thought them through) and in research value. I can't promise they are all totally novel, although there should be some mileage for novel research-worthy approaches in all of them except possibly those marked with an asterisk (*). Note that for a Bachelor's project, novelty is not important.
There are dependencies between some of the projects, such that I envisage somebody attempting one only after another one has been completed. I've highlighted the clearly dependency-free cases by putting them first, although it's not entirely clear-cut—some of the later ones could also be attempted from a fresh start. In any case, you can probably pick out most of the dependencies yourself from reading the titles, and I have tried to put the more dependent titles later in the second list.
Don't hesitate (really!) to ask me about any of them. The titles are just here to give you a flavour. In most cases I have prepared some more detailed notes which are not (yet) online. I will do my best to add these once they become readable enough, but in the meantime I am always happy to send more information by private correspondence.
It would bring you bad karma to take these titles or ideas and work on them without at least contacting me. (I doubt you can grok the idea from just reading the title, but who knows.) Some of these ideas arose from discussions with others, who I have done my best to acknowledge.
date | title | bakedness | suitability | acks |
10/2014 | A generic API fuzz-tester | med/high | B+ | |
9/2014 | A linker, mostly functionally | med/high | B+ | REMS |
9/2014 | An optimising linker | med | B+ | REMS |
9/2014 | System calls: intercepting, specifying, emulating | med | B+ | REMS |
9/2014 | A debug-time program slicer | med | B+ | |
9/2014 | Bounds checking using libcrunch | high | B+ | |
9/2014 | A garbage collector using liballocs | med/high | B+ | |
6/2014 | Debugging information for free: observing a simple compiler | med | PhD+ | |
6/2014 | A simple compiler in Prolog (or: “the next 700 intermediate representations”) | med | B+ | |
“ptrace() for the 21st century”: parallel dynamic analysis using observer processes | low/med | M+ | ||
12/2013 | Economic frame allocation | med/high | B+ | Jeremy Singer |
12/2013 | Federated garbage collection | med | B+ | |
A tool for inferring file formats by dynamic analysis of programs that use them | med | B+ | ||
02/2013 | Framed byte streams: inferring structure back out of Unix I/O | low/med | B+ | |
Data description for Unix IPC channels, and using it to reason about multiprocess compositions | low/med | B+ | ||
02/2013 | Don't be over-eager: detecting avoidable eager memory commitment in user programs (doing file I/O) | low/med | B+ | |
Really descriptive data description: a DDL capturing both textual and binary encoding idioms | med | M+ | ||
05/2013 | Copy profiling: understanding how programs copy data structures | low/med | M+ | FAN project |
05/2013 | Repetition profiling: finding avoidably repeated work in program executions | low/med | M+ | FAN project |
“Unanticipated software update”: binary backporting of source-level patches | med | M+ | ||
Lightweight link-time optimisation | med/high | B+ | ||
Lazy I/O: a clever execution model for stupid code | low | M+ | ||
A domain-specific language for debugger-friendly compiler optimisations | low | M+ | ||
Whole-program symbolic execution without recompiling (*) | med/high | B | ||
Input-sensitive symbolic execution | low/med | M+ | ||
API usage analysis using symbolic traces (a data-dependent form of API usage pattern) | low/med | M+ | ||
07/2013 | Selective dynamic recompilation for dynamic analysis (e.g. bounds checking) | low/med | M+ | |
DTrace with dynamic compilation: low-overhead probes for JVMs and similar runtimes | med | B+ | ||
09/2012 | ChannelScope: a communication-centric tracing tool (for Unix IPC; perhaps intra-process too) | low/med | B+ | |
“Compiling for the web”: a radically traditional toolchain for web development (using Emscripten) | med | B+ | ||
Stable source-code coordinates: a feedback-driven approach | low/med | B+ | ||
Language-independent APIs: using symbolic traces to understand language interoperability | low/med | M+ | ||
Language-independent APIs: using model theory to formalise language interoperability | low | M+ | Alan Mycroft | |
Library transitions made a piece of Cake | med/high | M+ | Michael Tautschnig |
title | bakedness | suitability | acks | |
05/2013 | Beyond text: an interactive data editor | low/med | B+ | |
07/2013 | Reactive heaps: an abstraction for programming with file data as objects | med/high | B+ | |
“Everything is a dlopen()”: retrofitting greater flexiblity onto Unix I/O | low | M+ | ||
“Solving the zgrep problem”: OS-enabled smart rendezvous between code and data | med | B+ | ||
Symbolic execution of partial programs using API usage contracts | low/med | M+ | ||
Scrap your scraper: a declarative approach to coding file I/O | low/med | M+ |
Content updated at Mon 6 Oct 19:58:00 BST 2014.
validate this page