Department of Computer Science and Technology

I am again happy to consider supervising Part II, Part III and MPhil ACS projects in overlapping areas of interest. In addition to the specific proposals tomorrow, more general areas of interest include: smart building data management (see CDBB work), edge computing orchestration, and other topics that align with current funded research or the work of my Ph.D. students.

For background, see current research projects and my home page.

Augmenting Deepdish
Deepdish is a privacy-preserving smart camera implementation for a Raspberry Pi that processes a video feed using a neural network to detect and track objects. This project is to augment Deepdish to do more than simply detect objects, e.g., to automatically blur faces.
Functional Probabilistic Programming
Probabilistic programming languages embed notions of variables as distributions in the language. This project would implement and evaluate such a capability, either in Rust or OCaml. See here for a past attempt, and Owl for background on numeric programming in OCaml.
General-purpose Tree Diffing
The tree is a very commonly-encountered data structure, but precise computation of edit-distance and patch-files for trees is computationally expensive. Can you produce an scalable implementation for a modern language such as OCaml or Rust, perhaps supporting alternatives such as approximate algorithms, or data structures beyond trees? See a past attempt for trees in OCaml.
High-performance Stream-based Packet Processing
Packet processing environment still tend to focus on particular domains (e.g., manual visual inspection with Wireshark) or perform poorly (e.g., Scapy). Constructs from functional programming such as OCaml or Rust's match expressions provide a natural way to decompose nested datastructures such as packets, and promise higher performance than languages like Python. Can you design and evaluate a library for high-performance stream-based packet processing that makes it easy to manage, process, and produce large packet traces? Can you extend this to other application domains such as IoT stream processing as StrIoT?
Analysing Open-Banking Data
I have several years of data collected via the public Open Banking Open Data APIs concerning bank products, physical locations, ATMs, and so on. It could be analysed to determine many interesting things, e.g., in which towns are banks expanding/contracting, or how far is it to the nearest bank, but doing so requires a mixture of tree-diff (see General-purpose Tree Diffing above), location-based analysis, and data science.
Personal File Systems
Modern filesystems are not designed for personal use-cases: access control assumes existence of root users, they have unexpected performance cliffs, they're not default-distributed, backup is an afterthought. Can you design one that's better, that resolves some of these issues? Useful starting points might be LittleFS and @yomimono's implementation for MirageOS described on her blog.