Monday, 16 May 2016

GSOC 2016

I came to know about Google Summer Of Code last year. For the uninitiated, it's an annual program organized by Google to promote Open Source. Organizations that want to be a part of GSOC send proposal requests to Google, who selects potential organizations and puts out a list. Students apply by sending proposals on Open Source project ideas to these accepted organizations. An idea can either come from the student himself or by selecting one from the ideas list provided by the organization. There is a limit on the number of proposals by a student.

I wasn't able to apply last year, more or less because of my limited knowledge about Open Source. I had just started to learn git then and worked only on small web based projects. Over the year I learnt a lot. Before OSS development I had more interest in competitive programming. Couldn't continue it, after a while it really becomes monotonous, especially if you don't move over from solving basic mathematical problems to problems that require knowledge about specific concepts, like dynamic programming, graph based algorithms, etc. Knowing these concepts requires going through a lot of theory, which wasn't exactly what I like. I had more interest in web development, and had worked with the XAMPP stack. With a little knowledge about Git and GitHub I started off with Open Source.

By the end of the year, I had taken up Python as my go-to programming language and even taught myself Django. The GSOC program and timeline were announced in October, but I didn't select what organizations to work with until after December. Even then I started contributing code only after January end. By February, I had made up my mind to go with two organizations. One was CloudCV and the other was FOSSASIA.

CloudCV mainly deals with providing cloud as a service for Computer Vision. It makes it easier for researchers to, for example run their computer vision algorithm on the CloudCV platform so they don't have to setup infrastructure. They do this by providing APIs for developers to work with. So it was more about working with image processing softwares than web development. Their website was on Django. FOSSASIA on the other hand, dealt with organizing technology summits and talks promoting FOSS. It is the largest Open Source organization in Asia. Projects at FOSSASIA were mostly web based. I started contributing to both of them. By the start of March I was pretty sure I was going with FOSSASIA, being a web developer I was able to contribute more.

FOSSASIA had multiple projects under it. The one that interested me the most was the Open Event Organizer Server. FOSSASIA organizes many events each year. The server provides an interface for the organizers to enter data about the sessions and speakers for the event, and provides API endpoints to read that data. These APIs are consumed by the Open Event Web App and Android Client to display data to the users. The server's written in Python and runs on Flask. As the student application deadline came closer I started focusing more on the organizer server.

With the deadline a week away, I had prepared two proposal ideas. One was a web app with focus on Event Sessions. Here's an overview, copied straight off from my proposal:

The idea is to direct more focus towards Open Event Sessions. The current applications (both OE web app and OE android app) that handle display of Event data lack interactivity and options to share Sessions. Users cannot review sessions, sessions listed are not shareable, there is no mechanism to rate them on the basis of their performance. Moreover, sending proposals for sessions requires users to log in to the administrator site (OE Organizer Server) and then send proposals. My proposal is to create a Flask application alongside the Organization Server that lets users sign in with Social Media platforms. This will enable them to send Session Proposals and write Reviews. At the end I’ll create API endpoints to create/update/delete Session Proposals and Reviews. These APIs can then be used to provide the same functionality to Android app.

My second proposal was to improve the current server app and create API endpoints to write data to the server. This included providing bug fixes and tests for the existing server. Creating write APIs meant making the server to accept POST/PUT/DELETE requests. I had more expectations from the first proposal. I had put up a lot of time in creating that proposal, describing how the entire app would work. The second one got selected though (Not that I'm complaining, just that I saw more potential in the first one.).

The work has already begun. I've started providing bug fixes and improvements to the server. The server would be going through major changes this summer.

I'm happy I didn't select a front-end project to go with. I had worked on a lot of front-end projects the previous year and wanted a switch to back-end.