Research Interests

Lots of things interest me. These are the ones that are related to computer science and reasonably academic.

Things I Claim to Know About

Answer Set Programming

I am interested in the technology behind the tools used for Answer Set Programming. For the un-initiated this is the process of representing a problem as a series of logical rules under the answer set semantics, such that by computing the answer sets of those rules, the solutions to the problem may be found. Primarily this is an interest in the technology of creating answer set solvers, however I am also interested in creating support tools such as debugging and visulisation applications to aid programmers. Current work includes developing a solver for handling large, sparse search spaces and prototype debugging and visulisation tools.

Knowledge Representation in Answer Set Semantics

The key, an arguablely only difficult step in answer set programming is encoding the implicit and explicit knowledge about problem and domain. To the best of my knowledge there are no standard techniques for doing this and in common with a number of othr logic programming formalisms it is more an art than an engineering process. It seems to involve aspects of software engineering, logic, mathematics and traditional hacking. I am interested in creating guidelines, perhaps even methodologies for approaching this sort of problem and thus am always on the look out for interesting problems to solve.

Things I'd Like to Claim to Know About

I feel it would be wrong of me to claim that I know about the following areas, however as this is a page of interests rather than expertise...

Operating System Design

I am interested both in the technology and the concepts underlying the design of operating systems; particularly at the kernel / systems level. Technology such as soft virtualisation, distributed operating systems and formal approaches to security seem to be starting to move from research projects to mainstream operating systems which raises some interesting possibilities. At the conceptual level I feel that micro kernel designs have a lot of potential as computer hardware becomes increasingly parallel and complexity becomes one of the main problems, as opposed to speed. I am slowly doodling plans for a POSIX compatable micro kernel but doubt I'll get the time to implement it.

Compiler and Programming Language Design

There are there main areas of programming language design and implementation that interest me optimisation, verification, parallelisation. The TOAST project aims to discover the limits of functionally equivalent optimisation and how close current technology is to that point. Beyond that I am interested in the 'hacking' side of binary optimisation, particularly in compiling for high performance computing. Verification is a large and thorny issue that brings together a lot of areas of logic and computing; of particular interest are approaches for verifying properties of C programs and type safety. A long term goal is to implement Pym & Tofts' Logic of Resources and Processes. Finally parallelisation, particularly automatic parallelisation of code and language constructs to enable support this are of interest.

Networking

'Computer Science' (if such a subject actually exists) has contributed much to the past 60 or so years of history. However the thing that is most likely (IMHO) to be remembered is the creation of the Internet, an international, distributed information network. Thus I feel that networking, more specifically application protocols over IP, is of considerable importance. My real interest is in decentralised, anonymous and 'secure' systems - normally linking with one of the three following topics.

Computing Security

The more widely used computers become and the more 'valueable' the information on them becomes the more important it is to ensure they are only used by the correct people and for the correct purpose. I'm interested in most aspects of computer security, theoretical and applied. Althought I don't feel it is meaningful to talk about 'total' or 'complete' security, I feel it is possible - given enough time and resources to adequately secure most systems. The catch is the amount of time and resources and what limits this places on the usage of the system (please note security and usablity are not linked, certainly not to the amount many people believe - I'm simply saying that some things, like the transitivity of trust are not yet understood well enough to be useful). I feel that in these areas there is still a significant amount of work to be done - and that is is necessary and important.

Cryptography

Cryptography is one of the few ways we have of providing any form of guarentee about the security of any system. These guarentees are often not absolute but they are about the best we can give. Thus to be interested in computer security requires at very least a base understanding of cryptography. This area also raises a lot of interesting social questions; if the publicly held beliefs about a number of pieces of cryptography are true then private individuals now have the power to protect information from governments. Is this a good thing? If so how do we ensure that it remains the case. If not then what do we do about it?

People and Computers

I aspire to understand computers but have conceeded that people are way beyond my understanding. None the less interaction between people and computers interests me; specifically how people use computers, what they use them for and how this changes people and the ways they relate to each other. In the end technology is just a tool - it is the people who use it that make it a good thing or a bad one. I feel that there is significant scope to use technology, particularly computer based communication technology to help solve lots of the world's human problems but that we also must be vigilant for intentional and unintentional abuses of technology at all levels of society.