Google Summer of Code

Google Summer of Code 2017

Welcome to the SCoRe Lab Google Summer of Code (GSoC) 2017 project ideas page. We are a dynamic and enthusiastic nonprofit research group pioneering in Internet of Things (IoT), Embedded Systems, Computer Security and 'Wireless Adhoc and Sensor Networks' and is one of the best groups in South Asia. We are based in the University of Colombo School of Computing, Sri Lanka. This is the third time that we are participating in the GSoC, we will use this page to develop possible project ideas that have on the above mentioned areas. Please note that anyone who is interested can participate in this process. You do not have to be a GSoC student or mentor to suggest possible project ideas. You can also talk to us about possible project ideas and we are happy to improve or heip you with them. Please keep in mind that projects need to be realistically something that is able to be functionally completed by a student working full time for about eight weeks. Thanks!

Mailing list:

IRC Channel:

Suggested Proposal Template

Important Guidelines on Submitting Ideas

There are some important guidelines to submit ideas, please read these carefully before adding your ideas;:

  • There is a fixed time period for implementing and coding your ideas.
  • Come up with attainable goals and you will be able to complete what you set out to do. You can always contact our mentors and community and get an idea about the workload and whether you might be able to complete them.
  • You are free to come up with your own ideas. The ideas should be about Internet of Things (IOT), Embedded Systems, Computer Security and 'Wireless Adhoc and Sensor Networks’. Also if you love to work on any of these subjects but do not have an idea you can always contact us.
  • Lets Talk! The best way to solve problems that you might have is to contact our mentors and also our community. This will help you to not get bogged down in your ideas and to move on.
  • We encourage you to do documentation so that we can keep track of your progress and also help you if things are not going according to plan. Although not compulsory we have a strong belief that this method can cut down your time to code and also the workload of the mentors drastically.

Project list for GSoC 2017

  • OpenIoE - Implement bidirectional publish-subscribe behaviour

    OpenIOE enables you to subscribe to data streams and get data from the sensors and store them. But it cannot act as a publisher, therefore a user cannot send control messages to sensors. (Eg. Changing the thermostat value).

    Required Knowledge: Spring Boot, ActiveMQ Artemis, MQTT, AMQP and Cassandra
    Possible Mentors: TBA
  • OpenIoE - Implement authentication for message broker and rest API for OpenIOE

    Currently, OpenIOE does not implement any security mechanisms for publishing or subscribing to any registered sensors in the backend.In order to support more clients, MQTT authentication and GUID based URL routing can be used.

    Required Knowledge: Spring Boot, ActiveMQ Artemis, MQTT, AMQP and Cassandra
    Possible Mentors: TBA
  • Implement rustcloud compute package for Google compute engine and AWS EC2

    rustcloud is a standard library for Rust that abstracts away differences among multiple cloud providers. The rustcloud compute package is designed to make it easy to provision and work with VMs. Developing rust package for interacting with Google compute engine and AWS EC2 using a unified API.

    Required Knowledge: Rust, Google Cloud, AWS
    Possible Mentors: Charitha Elvitgala (, Rumesh Hapuarachchi (
  • Implement nodecloud compute package for Google compute engine and AWS EC2

    nodecloud is a library for NodeJS that abstracts away differences among multiple cloud providers. The nodecloud compute package is designed to make it easy to provision and work with VMs. Developing NodeJS package for interacting with Google compute engine and AWS EC2 using a unified API.

    Required Knowledge: NodeJS, Google Cloud, AWS
    Possible Mentors: Charitha Elvitgala (, Rumesh Hapuarachchi (
  • Implement gocloud compute package for Google compute engine and AWS EC2

    gocloud is a standard library for Go that abstracts away differences among multiple cloud providers. The gocloud compute package is designed to make it easy to provision and work with VMs. Developing golan package for interacting with Google compute engine and AWS EC2 using a unified API.

    Required Knowledge: Go, Google Cloud, AWS
    Possible Mentors: Charitha Elvitgala (, Rumesh Hapuarachchi (
  • Convert Androphsy to a Web Application

    ANDROPHSY is an opensource forensic tool for Android smartphones that helps digital forensic investigator throughout the life cycle of digital forensic investigation. Services provided by ANDROPHSY includes,

    • Digital forensic case and evidence management
    • Raw data acquisition – physical acquisition and logical – file system level acquisition
    • Meaningful evidence extraction and analysis support
    • Evidence presentation

    At the moment, Androphsy operates as a Java Swing application. So now we want to convert it to a web application that works similar to OpenDF.

    Required Knowledge: AngularJs, Java, JavaEE, MySQL, Bootstrap
    Possible Mentors: Charitha Elvitgala (, Rumesh Hapuarachchi (
  • OpenADS - BellyGraph - Implement deep graph kernel to solve subgraph isomorphism

    Subgraph isomorphism asks if there is a subset of edges and vertices of G1 that is isomorphic to a smaller graph G2, decision version is NP-complete.

    Known polynomial alternative - Graph kernels which compare substructures of graphs that are computable in polynomial time. (e.g. Graphlet kernels, Weisfeiler-Lehman subtree kernels, and Shortest-Path graph kernels.)

    This project is inspired by deep learning approaches, to learn latent representations of sub-structures for graphs, and implement the deep learning notions in a scalable kernel model.

    Required Knowledge: Graph theory, Deep learning, Temporal models
    Possible Mentors: Milindu Sanoj Kumarage(
  • OpenADS - BellyGraph - Implement a scalable data-structure to model evolving graphs

    BellyGraph is a novel query framework built for evolving graphs, currently sketch based summarization techniques (e.g TCM) are implemented, and graph degree distribution is approximated across streaming graph relations. Idea is to extend the current data-structure to more scalable version which can deal with both online and offline analysis of evolving graphs.

    BellyGraph is directly connected with OpenADS -- which is a Big Data analytics framework designed to consume and monitor network traffic and mine hidden anomalies using advanced machine learning techniques. In current date, OpenADS is still at it's conceptual stage where it is designed to work at a massive scale. The system believes to act as an extensible and reliable platform to enrich traditional Intrusion Detection System (IDS). OpenADS is unique at it's nature with the architecture supported by Berkeley Data Stack (BDS). OpenADS Wiki

    Required Knowledge: Graph theory, Temporal models, Experience with any event driven language
    Possible Mentors: Milindu Sanoj Kumarage(
  • Stackle - Web communication portal for Open Source Organizations

    Stackle is an web communication portal aimed at providing Open Source organizations a platform to have discussions on their github projects and their issues. It provides Github intergration which allows adminstrator of an organization to create a forum thread for the particualr organization. Users signing in is able to view forums of the orgrnizations they contribute to and engage in the forum discussions.

    Required Knowledge: NodeJS, AngularJs
    Possible Mentors: TBD
  • DroneSym - Platform to Handle and Track Drone Fleets in Real Time.

    Dronesym is a platform enabling users to handle and track their drone fleets in real time. Users can have functionality to add new drones configure their flight paths and monitor their progress through a web dashboard.

    Required Knowledge: NodeJS, AngularJs, DroneKit, SITL runner for DroneKit
    Possible Mentors: TBD
  • OpenPub - publication manager

    OpenPub is a publication manager for individuals and research groups. OpenPub provides research's to upload and share their’s publications with others and get valuable feedbacks for their publications. It also allow users to easily find related resources in different areas and categories.

    Required Knowledge: NodeJS, AngularJs
    Possible Mentors: TBD
  • OpenDF - Rewrite the frontend using React or Polymer

    Front-end of the OpenDF is currently done using AngularJS, but we see we need a framework which is extra good in component based UIs. We like to make use of HTML5’s Web Components APIs in OpenDF. We are flexible on what framework to use, it could be React or Polymer or any other web component based framework.

    This also should go with ES6 and SCSS or LESS. Gulp or Grunt should be used for development, once the new release is ready for the production, files should be precompiled( ES6 and SCSS or LESS ), merged, minified, versioned, and put into ‘dist’ folder. Then the NGINX server can serve the new release.

    Required Knowledge: Any Web Components framework, ES6 and Babel, SCSS or LESS, npm/yarn, Gulp/Grunt
    Possible Mentors: Milindu Sanoj Kumarage(
  • OpenDF - Kubernetize OpenDF

    We have to put all the parts of the OpenDF into Kubernetes where anyone can deploy OpenDF with all the modules easily. We have some modules which are not Dockerized, you have to take care of them too. Modules exposes RESTful APIs, they should be made available through an API manager with proper access control mechanism. SSL support also should be there.

    Static files( frontend ) should be served by an NGINX server, which resides on its own container. You can work on this in community bonding period.

    Required Knowledge: Kubernetes, Docker, API Management, SSL
    Possible Mentors: Milindu Sanoj Kumarage(
  • OpenDF - Face recognition and profiles module

    When a disk image is being processed, the photo files will be piped to this module. This module should try to identify the face on the images, try to annotate the faces. Module should maintain a database of identified faces as profiles, thus, all the images of the same person should be categorized under one profile. Users should be able to manage names and other details of the profiles on this database. When asked for images of a particular person, given a name or any other available detail, this module should suggest matching profiles. Given an image, this module should suggest matching profiles by identifying the face on the given image.

    This module will be on its own instance and should expose a RESTful API where OpenDF can interact with. You should finalize the module as a Docker images, where when spawned an instance, it should start all the needed services and be exposing the APIs

    Some links that might help you are,

    Required Knowledge: Image processing, ML, TensorFlow, Python, RESTful services, Docker
    Possible Mentors: Milindu Sanoj Kumarage(
  • Bassa - Setup, Automatic Updates and Docker

    When running Bassa for the first time, it should redirect to the setting up process, where the admin accounts are created, organization details and logos set. Other details like, file storage directories, DB settings, auto update checking period, etc also could be configured there.

    Automatic Updates is where when we push a new release tag on Github, running Bassa instances should prompt to install the new version. If the user (admin user) accepts to install the new version, then the new version should get installed seamlessly.

    Finally, Dockerize Bassa to let anyone simply run Bassa by running the Docker, which starts the databases, web servers, etc.

    Required Knowledge: Docker, Gulp, AngularJS, Material design standards
    Possible Mentors: Milindu Sanoj Kumarage(
  • SCMaas - Smart Contract Monitoring Service

    With the growing popularity of BitCoin in the last couple of years, other blockchains have been in development for solving various problems that need distributed consensus. Ethereum blockchain is one example, that gives users to develop "smart contracts" that runs in the blockchain.

    This gives the ability to develop decentralized applications (or dApps). Users do not need to 'trust' anything or anybody.

    In addition to that, dApps are always available and will be guaranteed to be available in the future as well.

    Also, it is resistant to traditional attacks such as DDoS.

    This framework has given many developers to write a decentralized application without much effort, without needing distributed systems or cryptography knowledge. Many startups are actively developing applications for Ethereum such as Ethereum Name Service (ENS), Etheria or WeiFund.

    Unfortunately, because the technology being used is bleeding edge it is inevitable that attacks or hacks will target these apps for monetary reasons.

    Last year DAO suffered a severe attack because of its security flaws. Due to that attack, 3.6m ether was stolen from DAO's smart contract.

    Also, once you publish a smart contract in Ethereum it is not possible to modify or update it as a regular web application. Thus, even developers identify a critical bug in the contract it is not possible to push a bugfix in a straightforward way.

    Thus, in order to fill the gap of not having a proper 'smart contract' compatible monitoring service, we propose to build a web application that can monitor other smart contracts in Ethereum and give the capability to safeguard it's critical functions (Ether send and receive) and interact and visualize with smart contract functions in a much simpler way.

    Also depending smart contracts can using our base smart contracts to gain the advantage of having 'circuit-breaker' which will pause the activity if things go wrong in an unexpected way.

    Required Knowledge: ethereum, go, nodejs
    Possible Mentors: TBD
  • Kute - Implement the feature for private vehicles that are travelling to a known destination on a regular basis

    When considering private vehicles, there are many vehicles in Sri Lanka that travel regularly by filling on a few seats or only the driver him/her self. The remaining space can be used by people travelling to same destination on same route. With this feature, the owner of the vehicle can update how many seats are available for passengers(friends) and this information along with the current location will be sent to passengers(friends). These passengers called friends are people who travel in the same road as the owner, on a regular basis. Friends can reserve their seats by requesting when they see available options around the covered geographic area.

    Implementation- This has to be implemented for two friend groups:

    • Among a friend list registered in the app database
    • Facebook Nearby Friends

    The user should be able to choose how he or she would choose friend groups.

    The features include:

    • Send friend request
    • Accept friend request
    • Create new route
    • Save daily routes (for hosters)
    • Share route with number of seats, route (from-to)
    • Friends can response to shared route to get the drive
    • Display advertisements in the app.

    Required Knowledge: Android, Firebase
    Possible Mentors: Dilushi Piumwardane, Nithila Vithanage
  • Ceylon - Native compiler

    Ceylon-native is an initiative project to produce a free and open source compiler to compile Ceylon to native code. Usually Ceylon runs on Java Virtual Machine and the default Ceylon compiler compiles the Ceylon codes into byte code or Javascript. In this project we use the ability of importing Ceylon modules to Java and compile Java to native code using GNU compiler for Java ( GCJ ), using a dependency handling mechanism. Implementing the CLI tool for the compiler wrapping up all the dependency handling mechanisms used by Ceylon compiler is the main task of this project.

    Required Knowledge: Ceylon, C, Java, GCJ
    Possible Mentors: Tharindu Ranathunga(
  • Drola - Drone with Lora

    Drones use their radio link to communicate with their ground stations and controllers. Those radio links can communicate for a limited range. When a drone fly automatically through way points it may go away from radio link. Then ground station unable to monitor that drone any more. We want a system to monitor automatically flying drones using long range communication network “LORA” . Its mandatory to uniquely identifying each drone, for that we want to bind unique key to each drone. The final product should be a separate unit which can externally mound on any kind of drone.

    Required Knowledge: C++
    Possible Mentors: TBD

© Copyright 2016 Sustainable Computing Research Group (SCoRe)