MoK » Projects

MoK Projects




Whereas the following projects are mostly conceived for graduate students following the course on Distributed Systems, anyone coming across this page is welcome to contact Stefano Mariani if interested: most projects can be adjusted to cover both a thesis and a master thesis.


Information exploration and exploitation: leveraging Behavioural Implicit Communication in distributed shared workspaces

Despite the specific project chosen, reading the following papers is highly recommended:

Cristiano Castelfranchi, Giovanni Pezzullo, Luca Tummolini. Behavioral Implicit Communication (BIC): Communicating with Smart Environments via our Practical Behavior and Its Traces. International Journal of Ambient Computing and Intelligence 2(1), January-March 2010
Stefano Mariani, Andrea Omicini. MoK: Stigmergy Meets Chemistry to Exploit Social Actions for Coordination Purposes. Social Coordination: Principles, Artefacts and Theories (SOCIAL.PATH), 3-5 March 2013
Stefano Mariani, Andrea Omicini. Anticipatory Coordination in Socio-technical Knowledge-intensive Environments: Behavioural Implicit Communication in MoK. AI*IA 2015, Advances in Artificial Intelligence, Lecture Notes in Computer Science 9336, 23-25 September 2015

  • Users in MoK: epistemic actions for knowledge formation and discovery
  • Users in MoK: exploiting users actions context to drive information evolution

Information persistency: scalable distributed storage solutions (e.g. key-value DBs, graph DBs, document-oriented DBs)

Despite the specific project chosen, reading this then this is highly recommended.

Information management: decentralized self-* algorithms, semantic reasoning on resource-constrained devices, efficient in-memory DBs

Also, the list of projects may likely be updated with novel proposals anytime: please, if interested, check periodically for updates.


The goals of participating in these projects are:

  1. make students learn advanced topics about coordination, multi-agent systems, and middleware
  2. make students work on state-of-art research topics using widely adopted technologies
  3. make students fruitfully contribute in building a novel technology, while having fun
The projects below are split into four research topics, which are, not by chance, the main logical components of the Molecules of Knowledge technology. As such, besides being the whole set of projects conceived to become part of a coherent and integrated MoK "ecosystem", projects within the same topic are tightly coupled. Nevertheless, they are designed so as to be modular enough to allow separate activities and separate software products. Therefore, a fundamental concern to account for while developing the projects independently, is to promote reusability and modularisation with the goal of future integration.

Expected outcome

The expected outcome of any project listed below is

  • a written essay describing the activities undertaken to develop the project (goals, challenges, methodology, solutions, etc.)
  • a software module supporting and demonstrating the projects claims
Nevertheless, the exact nature of each artefact is also determined by the specific project itself and by the evolution of the same.

To quickly getting a grasp of what Molecules of Knowledge is, read the "Overview" page and this MoK talk (link to Slideshare therein, too). Then, besides the literature and reference material specific to each project, you are strongly advised to read the MoK "Overview" page and the following papers on MoK foundations:

Technical info

The second goal described above states "make students work on state-of-art research topics using widely adopted technologies". This means that it is important for you to learn using the right tools for developing software products: besides being useful for boosting your productivity, it will be extremely valuable in your future workplace. Accordingly, all the projects must be developed using the following tools:

  • Java, as the main programming language and execution platform (some projects may require other languages for specific tasks)
  • Eclipse, as the reference IDE (featuring some invaluable plugins I'd like for you to adopt, e.g. Checkstyle and FindBugs)
  • Maven, as project management tool of our choice (supporting coherent development of your software products and easy integration)
  • Git, as the distributed version control system of our choice (enabling distributed development and preventing you to break everything ;D)
  • Bitbucket, as the source code hosting service of our choice (enabling distributed development and preventing you to break everything ;D)
Usage is straightforward, nevertheless, here it is a quick how-to about setting up your working environment:

  1. Clone with Git the project codebase from its Bitbucket online repository into a custom folder on your machine. Git is a Distributed Version Control Systems, available from here, quick guide here. Either use Git from the command line or through a graphical client (e.g., SourceTree is available both under Mac and Windows). E.g., if using the command line, type (replacing username with your Bitbucket username)
    git clone
    Folder 'mok-projects' should be created, storing the project codebase.
  2. Checkout the remote branch named after your group members' surnames (e.g., 'feature/surname1-surname2') on your local copy of the repository (that is, within folder 'mok-projects'). E.g., if using Git from the command line, type
    git fetch origin
    git checkout -b feature/surname1-surname2 origin/feature/surname1-surname2
    If you now type
    git branch
    you should see two branches: 'master' and 'feature/surname1-surname2', the latter with an asterisk next to it.
  3. Open a new Eclipse workspace therein, that is, into the newly-created folder 'mok-projects'. You may use another IDE if you wish, but usage of Eclipse is warmly suggested, due to the following plugin I wish you to use.
  4. If necessary, download & install the Maven plugin for Eclipse, available from
  5. If necessary, download & install the Checkstyle plugin for Eclipse, available from!/
  6. If necessary, download & install the FindBugs plugin for Eclipse, available from
  7. Import all the Eclipse preferences from the cloned file 'Eclipse-prefs.epf', within folder 'mok-projects/mok/config/'. If successful, under 'Eclipse > Preferences > Java > Code Style > Clean Up' you should see 'TuCSoN' under label 'Active profile:'.
  8. Import the codebase you just cloned as a Maven project. Choose 'File > Import… > Maven > Existing Maven Projects' then choose 'mok-projects/mok' as the "Root Directory:". If successful, a number of Maven (Java) modules (projects) should appear in the "Package Explorer" view, decorated with a little 'M' in the upper-left corner of the project icon, and a little 'J' in the upper-right corner (except for project 'mok', which only has the 'M' label), as shown by the screenshot at the bottom of the page.
  9. If necessary, fix the directory structure of the imported projects according to the screenshot at the bottom of the page.
  10. Import Checkstyle preferences from the cloned file 'MoK-checkstyle.xml', within folder 'mok-projects/mok/config/'. Choose 'Eclipse > Preferences > Checkstyle > New', then 'Project Relative Configuration' next to label "Type", browsing to file 'mok-projects/mok/config/MoK-checkstyle.xml' (give it the name of your choice, doesn't matter). To finish, select the "Check Configuration" just imported then click on "Set as Default".
  11. Happy coding ;D
For any question, do not hesitate to mail Stefano Mariani!