Posted by Akila Sandakelum (Student, GSoC 2015)
There is no doubt that GSoC is the most happening and most awaited event in open source world. In my point of view all open source lovers with the eligibility, should try GSoC at least once. For anyone who doesn’t know what it is and likes to find out more, here is the link to follow.
How did I got to know about the GSoC ?
Last year GSoC proudly celebrated its 10th anniversary. On behalf of the 10th anniversary an event had been organized in my university, University of Moratuwa, Sri Lanka with the participation of a team from Google itself. I’m proud to say that the reason for being for choosing this university to held the event is University of Moratuwa has had the most Google Summer of Code students for an impressive 7 years in a row so far. So I was one of the lucky ones to witness the event and I also dedicated to participate in the GSoC that year. Unfortunately with the industrial training period and part time job activities I could not make a proper proposal to apply within the given time period. But there I got to know much about how the GSoC process is going on, how to select a matching organization for my skills and how to write a proper proposal etc.
How did I select the right project?
Ok, in this year when I participate in GSoC, I had much got to know about GSoC as I mentioned earlier. It was a huge push to me to carry on tasks this year. So I highly encourage friends out there if you couldn’t select for GSoC once, don’t worry apply next time with the experience you got and there is a high probability of accepting next time, for sure.
Actually selecting the right project is one of the critical task once go through in GSoC. Though it seems to be easy actually it isn’t. Because there are nearly 100 organizations and out of those organizations various kinds of projects to select. One could have multiple choices depending on his or her skill sets. But one should be keen on previous experiences with a particular technology, previous projects that have been involved with using a particular technology when selecting a project. It would be an added advantage to you when comes to proposal writing.
So in my case when the organizations were announced I went through the accepted organization list, not once but multiple times. When searching for a particular project pay attention on tags regarding with the organization projects’ technologies and key areas. So I noticed an organization with tags mLearning, Android,C++, github. Great…that matched perfectly for my skill sets because I am a Java and C++ lover and had previous experiences with Android, C++ and github
Here are some of my previous work :
And the most significant fact is I love teaching since my young age and I always gave plus points for mobile learning. The organization found along with that tags was “BuildmLearn”. I guessed that this organization should involve mobile learning aspects as the name suggests and I found that I was right when I go through the idea list and official page.
I took a deep look on the idea list and found interesting the project idea “Label the Diagram” under mobile application category. The idea was providing an interactive and open space to study Biology, Physics, Chemistry and Science subjects by labeling the diagrams comes under each subject areas through an Android application. And it was the only one with difficulty level “Advanced” under mobile application category and I thought why shouldn’t I give a try because I always love to solve complex problems in simple way. So I finalized the idea and contacted mentors refined the project idea.
An important fact to note here is how you interact with mentors and other members of an open source community. Different organizations may use slightly different methods, mailing lists and IRC chats are most common ways. So when you interact with such community you should extremely follow mailing list etiquette. Depending on the organization it may vary, but in common they are same. When I was working on PetClinic project using Apache ISIS framework I got the chance to interact with the Apache ISIS developers for a long time and learnt how a community works. So it would be really beneficial for you if you can get real experience by communicating with such an open source community, when reaching to mentors and helping out the members of the community.
Proposal period and proposal writing
I identified that “Label the Diagram” application is quite innovative and challenging. So in the proposal period I continuously brainstormed the project idea to find out the best method to meet the requirements. I always reached to the mentors to clarify so that I can ensure my approach is align with the project idea. This is cruisal because if the requirements and your delivery approach doesn’t align then it is only a waste of time. The requirements under the project idea were as follows :
- User should be able to see list of available diagrams under each subject and select one of the diagram and label the diagram
- In diagram play scenario there are set of tags with tag labels along with the main diagram and user should be able to label parts of the diagram by drag and dropping tags.
- Correct labeling should be scored
- Clicking on each tag should show a description of the tag.
- Implementing an updating mechanism by adding new diagrams through an external repository.
These were the basic requirements demanded by the application. But it is more beneficial if we can add some new features understanding the domain of the application, if those features align with our skill set and timeline. At the same time having a good understanding about the audience or the targeted user base is highly essential before writing the proposal. I cleared with that by contacting the mentors. So the targeted audience were school children. So I planned the design of the application from that onwards. I understood that this is a gaming type of application and adding gamification techniques is more user friendly and attractive. So in my proposal I suggested some new features such as scoreboards, badges and lessons for improving further knowledge of the students.
Here is the link to my complete GSoC project proposal. (As it is quite long I thought to keep it externally )
And further, as a POC, I designed all the screens from the first screen to the last screen as wireframes. Here I used an interactive wireframing approach. This is highly useful since it gives a better understanding of the navigation and workflow of the application to the viewers specially for the mentors. It describes interaction between the user and each screen. Most of the time undoubtful places of the project proposal is addressed and cleared by using such an approach. So I highly recommend you to use an interactive wireframing tool to design the all screens of the whole application. Finally I created a video for as a demonstration of the application for a better explanation.
Here is the link to my full set of screenshots of wireframes and the demo video ( Anyone who wants to play the video download the folder after signing into Google drive and please run and ‘Demo1_player.html’).
So in my point of view you should spend a significant amount of time to refining your proposal, wireframes and other demonstrations iteratively. Sometimes some organizations prefer to have code implementation as a POC, but in BuildmLearn that’s was not the case.
And when writing the project proposal you should always consider to put a proper timeline at least roughly mentioning the deliverables for each week.
At the very beginning of the coding period I received the welcome package by Google with a warm welcome by the Google to Google Summer of Code 2015 as a contributor for the next three months.
I loved it very much since this was an official gift from Google to me though I had received some small gifts from various Google events in the uni.
Midterm goals and developments
At the beginning of the community bonding period I was assigned a mentor who always give me the support and guidance to align in the correct direction. So at the community bonding period UI were refined and redesigned wireframes for phone screen sizes since I have designed the wireframes for tablet resolutions in the project proposal. And at the end of the community bonding period we set the mid-term goals.
I must say that my university exams conducted over three weeks were overlapped with at the very beginning of the first phase development. So we had to narrow down the midterm goals list. I must say that Pankaj, my mentor was a well organized person and as he was encouraged me to cover up all the wireframe refining and finalizing within the community bonding soon I could cut off that time from coding period and could directly jump into coding stuffs.
Here is the list of mid-term goals:
Covering up all the screens from splash screen to diagram result screen including :
- Splash screen
- Main menu
- Diagram categories menu
- Diagram selection menu
- Diagram Play screen
- Diagram result screen
And we planned to cover up all the diagrams under Biology category containing four subcategories :
- Human Body – Human Eye, Human Ear, Human Heart
- Plants – Plant cell, Plant flower
- Microorganisms – Bacteria, Virus
- Natural cycles – Water cycle, Carbon cycle
Further we planned to implement the multiple screen support for large screens at first.
With these goals set I started the developments.
A most important thing I learnt from Android development so far including previous experience is “we need to start with a proper architecture for both the back end implementation level and UI design level for the application”. Well, this might be not much relevant if you are developing a small application with only small amount of classes in all. You will be able to manage it . But however when the project gets bigger handling thousands of resources you will realize that you will have to change 100 of classes if you not follow a proper architecture for a single function implementation later.
So I foresaw this and started to think of a proper architecture for the application first. Architecture may differ according to the context and scenario . Some can follow MVC or MVP architectures since by default Android supports MVC architecture. I broke down the architecture in considering functional wise. I delegated separate packages considering each class’s function or responsibility as main, adapters, helper, widgets, database, services and modules for each core feature. Some can tweak this architecture but what you should remember that if your architecture sits on single responsibility principle and as much as you follow it your life get easier. And the other fact is if you adhere to GOF design patterns when it is necessary it would be save your time and ultimately may lead to clean code. Singleton, Factory, Adapter, Memento are some of them.
So ultimately at the end of the final phase I was able to code it out all the features we planned for the first half and I was really happy I could finish it completely with the limited amount of time. And finally I passed the mid term evaluations though I was little bit nervous at the beginning.
Here are some of the screens from first phase developments.
I had to cover all the other features I proposed for the application at the beginning of the GSoC. That includes,
- Cover up rest of the diagrams in Physics and Science category
- Implementing Scoreboard feature
- Implementing Lessons feature for all the diagrams
- Badges feature for special achievement
- Setting menu
- Help tutorial
As you can see the set of goals were pretty much for the second period. I clearly understood that I need to work at least 12 hours per day continuously as there were lot of designing, implementation and testing. So at the beginning I break down my tasks to subtasks and I made a rough timeline for the second phase. I kept updated my mentor Pankaj with the timeline as it is highly essential the synchronization between the mentor and the student. Both parties should know where we are now. Usually I prefer to use a TODO list application for day to day life activities and got the maximum benefit throughout the GSoC more than before. I planned the tasks as a check list for the next day, in the night and when the particular tasks is done the task entry was checked. That was quite fun and gave some kind of satisfaction personally, specially for GSoC.
Implementing Lessons feature was straightforward though I had to work a lot of database manipulations. Scoreboard feature included two sub tasks which are displaying ‘latest score’ with all the correct and incorrect moves and ‘best score’ so far with all the correct and incorrect moves. Implementing badges awarding feature was quite challenging. Writing logic for badges awarding was not the hard part to me though it demanded a quite coding efforts, hard part was identifying the different combinations where multiple badges may needed to awarded and covering up all those combinations. Because otherwise the user may confuse with the game logic. So it took a while to complete those all possible combinations. Other than that at the end I added Help menu for user friendliness and Settings menu for customizing the app. There I could added the fancy feature “sounds” for the game.
At the end of the second phase I was very happy because we could finish all the features mentioned in the proposal including testing. For testing the app I installed the app on few of my friends’ devices and checked whether the app is good at multiple screen support. The feedback I got made me happier because the app is working on all screen sizes from 4 inches normal screens to 5.5 inches large screens well.
So the only remaining task is to upload the app to play store by fixing any bugs in the next couple of days.
Difficulties and challenges faced
The most significant difficulty I faced is implementing multiple screen support for the application. Since my application is highly based on images and diagrams I had to spend a lot of time to design UI for supporting all the screen ranges in normal and large screen categories. The problem was though the Android native views such as TextViews and Buttons automatically resized and supported multiple screens when it comes to images handling Android support was poor. The reason is though Android has divided screen ranges as small, normal,large, xlarge a wide variety of screen ranges belongs to a particular category. Different phone manufacturers make devices with different screen resolutions unlike Apple make things worse. As an example all screens from 3.7″ to 5″ belongs to ‘Normal’ screen category. And if you design an UI including bitmap images (including images for all mdpi, hdpi, xhdpi, xxhdpi) concerning a 5″ screen device as your testing device and though it looks very nice and clean in that device when you see the same UI in the 4″ device you may want to cry sometime! Believe me, I faced the same situation. Because most of the images may overlapped or misplaced. So the solution was selecting a base device at the bottom margin of the particular screen range (i.e. 4″ screen device for normal screen category) and design the UI for that device. Then though the overlapping solution was solved in 4″ screens in 5″ screen device a lot of unwanted spaces may left and images may not be centered. So I had to handle all that mess programmatically by myself and then it worked well.
Here are some of the UIs from the final completed application.
The Bottom Line
Along with the bunch of real coding experiences and nice pay check from Google one can get various amazing experiences from GSoC. Let me quickly explain such an amazing experience I went through.
This is not relevant to coding stuff at all. The root course for this is my mentor Pankaj though he doesn’t know until he reads this blog post. In my university I had to cover a non-technical module and various subjects were offered. One of them had to be selected. Health and Safety, Tourism, French, Japanese, Korean and Hindi were some of them. Though I had the chance to select Health and Safety and save my semester easily I chose Hindi instead. There were few reasons for that. One, I loved Hindi since from my young age since it was a beautiful language. Two, I loved to sing Hindi songs as a leisure time activity. And the last, but the most crucial reason was to communicate with my mentor Pankaj (my very first friend from my neighbouring country) with their native language sooner or later one day. May be that was a crazy idea. But I badly needed that I tried my best with the limited amount of time I got. So with those efforts I could learn Hindi few more steps further and now I can read and write from Hindi though I could not communicate with my mentor from his . So in my point of view what I want to highlight that GSoC not only gathers Open Source minds together but also it collaborates different cultures together.
Here is the complete set of all related links to my GSoC work
- BuildmLearn homepage – https://buildmlearn.org/
- Complete source code for Label the Diagram app – https://github.com/BuildmLearn/Mobile-applications/tree/master/Label%20The%20Diagram
- My GSoC blog posts – https://akilasandakelum.wordpress.com/category/gsoc-2015/
Originally posted at https://akilasandakelum.wordpress.com/2015/08/25/footprints-over-the-summer/