Research

My Current Research Interests and Computing ‘Hobbies’

Cryptic clue solving

Using a computer to solve cryptic crossword clues is a challenging problem involving a combination of Natural Language Processing, smart algorithms and software performance engineering. I’ve been fascinated with the probem for several years and have developed a solver called Morse, written in Haskell which goes a long way to solving the problem. Depending on the publisher, Morse can explain up to 67% of British newspaper clues when the correct answer is guessed or provided up front (worst case around 44%), and can blind solve up to 37% of clues (worst case around 16%) when no information or context is provided up front. The corresponding average solution times are approximately 0.4s and 1.5s.

There are lots of remaining, open, problems, mostly in the NLP space. If you’re interested in the subject feel free to get in touch.

Virtual Time

Virtual-time program execution (VTE) is about supporting time dilation, i.e. the dynamic expanding and contracting of time, during the execution of a program, in order to simulate the effect of speeding up or slowing down specified parts of an application or its supporting platform.  This provides a powerful way to augment traditional profilers because it enables you to explore the potential benefits of code optimization without having to change the code.  It also allows real programs to communicate seamlessly with stubs representing, for example, models of missing parts of a partially-completed application or replacements for existing but non-performant code.  Project ideas include:

  • Sequential, distributed and parallel/multicore frameworks for VTE
  • Model-based software performance testing in virtual time
  • Bottleneck detection and bottleneck scaling in virtual time
  • Virtual-time operating systems
  • Validation/evaluation of VTE systems, e.g. using bespoke applications or software repositories

Functional programming

Functional and logic programming languages provide an elegant side-effect-free paradigm of computing which makes them especially amenable to formal analysis, transformation and, in particular,  parallelisation.  Project ideas include:

  • Type safe embedded domain-specific languages
  • Functional programming for programming multi-core and/or custom computing systems*
  • Functional/logic/combined languages for teleo-reactive programming
  • Novel applications of functional programming

Pedagogy

Software Engineering is a topic that we teach exceptionally well at Imperial and I have an interest in publishing educationally-focused papers on the subject as and when there is something interesting to say.