Community bonding period

After having a talk with Daniel, my mentor, we decided to create a new project, instead of just working on top of the existing Compliance Tester project. For the time being, this new project is called Compliance as a Service. It definitely requires a better name. (If you have any name ideas, feel free to suggest) Other than that, these are some key highlights from that period:

  • I got an XMPP server(Prosody) running on my Raspberry Pi and an ejabberd server on my laptop, with some help from Daniel. I wrote instructions for getting different specifications implemented in ejabberd, prosody and metronome servers that will be used in the results page. I would have written instructions for Openfire too, had I not found it a bit too cumbersome(I will try to reattempt it later)
  • I made mockups for the user interface. There are a few rough edges in the mobile UI as I am not very experienced in web development, but hate using frameworks like Bootstrap.
  • I made some decisions, like writing a custom graphing library (or something based on d3.js) in JS for plotting graphs for visualization.

All in all, I didn’t have much to do in Community bonding period, as I had exams during that time and had already discussed many of the details of the project with Daniel beforehand.

First Week

It has been a good first week for my GSoC project. I managed to get some work done on the weekends after a bit of slow start during the weekdays, owing to unexpected personal schedule. Here are some of the highlights of the work I did in this period:

Annotation processing and other structural changes

I created custom annotations for the compliance tests. Not only will these annotations store the metadata for a test, but also used to generate a list of all the tests. This way, we don’t have to manually maintain a list of tests to run. All this work can be delegated to the annotation processor, which runs at compile time to generate a source file with all the required tests stored in a list.

Here is how the annotation looks like:

        short_name = "xep0191",
        full_name = "XEP-0191: Blocking Command",
        url = "",
        description = "Provides an easy to implement method to block communications with selected users"
public class Blocking {

And here is how the generated source file looks like:

public class Tests {
    public static List<Class<? extends AbstractTest>> getTests() {
        return Arrays.asList(

It took quite a bit of effort to get it running, as I had never used maven or custom annotations before, and I kept on making very silly mistakes. At least now I know that annotation processing is not some sort of voodoo witchcraft.

Other than that, there was mostly copying code from the existing ComplianceTester and ServerStatus projects, and modifying it for use in this project.

Credentials adding page

Credentials adding/updating page is almost complete. There are few changes left to be made in the back end, which will be hopefully done by Monday morning. Here is a quick demo GIF:

Quick demo of add page

What’s next?

In the next week, I will start by adding JUnit and writing some unit tests. Then, I will get the back end for running tests done. It will involve quite a bit of work as I have to pay attention to lots of small things to make sure that will later be handy for generating graphs and other interesting stats about compliance. If I have some time left after all of that, I might get some work done on the results page.