Thesis topics

I can supervise theses on several topics (read below). Actually, I prefer to discuss thesis topics with students, whose proposals are welcome! That said, take inspiration from the following non-exhaustive list of topics. There is no particular requirement, with the exception of being reasonably skilled on some object oriented programming language (C++, Java, PHP, JavaScript, Python, the language is not really an issue… we can always learn something new).

Logic programming

Logic programming is a declarative paradigm for problem solving. The programmer states requirements of the solutions of a given problem in terms of logic rules. These rules are then processed by a solver, which returns a solution to the programmer.

What to do in this context?

  • Analyze properties of some logic programming language.
  • Solve (real) problems using a logic programming language (and other paradigms).
  • Integrate some logic programming language with other technologies (XML, HTML5, Android).
  • Design graphical unit interfaces to ease some common tasks in logic programming.

Propositional logic and its extensions

Propositional logic formulas are combinations of logic connectives (and, or, not, implication and equivalence) and propositional atoms, that is, propositions whose interpretation is Boolean. Propositional logic has several interesting applications, among them are model checking for circuits equivalence. There are also several extensions of the framework. For example, max-sat allows to express an objective function, pseudo-Boolean constraint programming allows to specify linear inequalities, and satisfiability modulo theories allows to combine propositional logic with external theories that are decidable fragments of first-order logic. Have a look at z3 by Microsoft to have an idea of the potentiality of these frameworks.

What to do in this context?

  • Analyze properties of propositional logic and its extensions.
  • Solve (real) problems using propositional logic and its extensions.
  • Integrate these frameworks with other technologies (XML, HTML5, Android).
  • Design graphical unit interfaces to ease some common tasks in these frameworks.

XML technologies

XML stays for extensible meta-language. Essentially, it is a markup language for defining languages. Most applications nowadays use XML to serialize and exchange data. The success of XML is due to its simplicity and flexibility, but also to the several technologies that have been developed to query and manipulate XML documents.

What to do in this context?

  • Model some application domain in XML Schema.
  • Manipulate XML documents by means of XSLT templates.
  • Design graphical unit interfaces that serialize data in XML.
  • Integrate modern web applications into other applications.

Computer vision

Computer vision aims at acquiring, processing and analyzing images. Roughly, raster images acquired by a camera or a scanner are manipulated at different levels. Noise is removed by opening and closing transformations, called morphisms. Orientation is restored by identifying key points in the image and then by applying affine transformations. Relevant objects in the image are finally identified thanks to different strategies.

What to do in this context?

  • Develop applications using the OpenCV library.
  • Produce forms to be printed and process them automatically.
  • OpenCV is available for C++, Python, Android and other platforms. Which one do you prefer?

HTML5

HTML5 is the new standard for developing web sites and applications. Its main components are the markup language HTML (with a few new semantic tags), cascade style sheets (CSS), and the versatile programming language JavaScript. There are plenty of libraries that can help web developers in their work. Among them are jQuery, jQuery UI, jQuery Mobile, libraries designed for retrieving and manipulate DOM elements, and for developing graphical unit interfaces. Other interesting libraries are collected in the CreateJS project, and ease the development of multimedia content such as games and animations.

What to do in this context?

  • Develop web-based graphical unit interfaces.
  • Design games to be run on modern browsers.
  • Design web-based business applications storing data in IndexDB.

Android

Android is a modern OS for smartphones. It comes with a native Java API, but also supports other programming languages. Modern smartphones are usually equipped with several sensors, which pave the way to the design of completely new applications. In fact, the base OS is usually enriched by several apps, most of them directly developed by users.

What to do in this context?

  • Develop apps for Android.
  • Design games for Android.
  • Other stuff that make sense to run on Android.