Showing posts with label GSoC. Show all posts
Showing posts with label GSoC. Show all posts

GSoC 2016 Winds Down


Google Summer of Code 2016 has come to an end. And yes I am satisfactory to a certain level that I have produced something tangible and all of you are able to access that. 

Everything about GSoC had been awesome from the day one until the end. I feel that’s the best thing that ever happened to me, contributing to an open source project while learning tons of things regarding new technologies and best principles of coding, gathering remarkable experiences and and getting into the community, all had been very useful to me. On the other hand, I am glad that my effort had been really merged in to the production. 

During this week, I have been testing the website whether it functions properly as intended, and then documented all my work so that they would be useful for people who wish to contribute in future. 

GSoC is awesome

Everything about GSoC had been awesome from the day one until the end. I feel that’s the best thing that ever happened to me, contributing to an open source project while learning tons of things regarding new technologies and best principles of coding, gathering remarkable experiences and and getting into the community, all had been very useful to me. On the other hand, I am glad that my effort had been really merged in to the production. 

Another important thing that I find with GSoC is that I had been working and contributing to an existing project, so I had to undergo a learning phase first to understand the code base, then adhere to those coding styles, technologies and tools to get the work done. That is something challenging than developing something from scratch and that’s definitely an awesome experience when we find that our code really works. 

The other most important thing that I really feel very happy is to work under the guidance of a great mentor who has taught me lots of very useful things which are technical as well as non technical. My project would never be successful if I had done it in my own way which I am used to do everyday. His motivation let me think out of box, made me more encouraging and at the end of the day, I learned lots of interesting things. I believe that having a very generous, helpful and interactive mentor is a key factor for GSoC. The last few months had been a wonderful internship for me and I am really grateful for KDE community and Google for offering me that opportunity. 

Although it is Google SUMMER of code, being in a tropical country it's always like summer in Sri Lanka. Hence we do not get any special holidays for summer and I have gone through this competition while attending the university and doing various university assignments as well. With the limited time I have had, I am happy that I was successful in managing the time to get this project up to this state and I feel contented about it. Infact I am happy about every task that I did during my GSoC project.

What I learned

The journey up to now has not been easy because I had to learn a bunch of new technologies and have met up with a number of issues during coding and integration. 

The main thing that I learnt is doing a design oriented project using an approach that uses more design thinking. During this, I learnt lots of HCI principles related to usability. Each phase of the project had been implemented methodically so that I improved myself step by step. It had been really interesting to get the ideas and suggestions from the actual audience that use the website, which in turn taught me lots of valuable things. 

The code base had mainly used Ruby, which had been a completely new programing language for me. I learnt lots of things related to Ruby community like using Ruby gems and so on. During this project, I learnt Ruby basically and also learnt other technologies like Haml, HTML, Javascript, jQuery, CSS, Bootstrap, Nokogiri and many more. 

I also learnt about testing, which is a very important part of every project. During this project, I underwent behavioral driven development with unit testing and integration testing. I learnt how to use Rspec, Nokogiri, Capybara etc.

Then I learnt about inqlude command line client and contributed to that as well. UX is something which I love to do, with this project I learnt lots of things about front end web development as well. 

Some very important additional things that I learnt during this project are using the Inqlude workboard in Phabricator, using Git for version controlling, documenting the work, maintaining a blog, communicating with the mentor using emails, video calls etc. All these things would definitely benefit me in my future career as a software engineer. 

Work report

Repositories (Master repositories: All my work are merged to the following)

Inqlude [commits]
Inqlude-data [commits]

Documents:

Project work summary
Blog

Resources

Inqlude project on KDE's Phabricator
Workboard

Design phase

Observations
Inspiration
Storyboards
Interactive prototypes


Even though GSoC has come to a pencils down, my contributions to KDE community and Inqlude project will not halt. And here onwards I will start contributing more and more to the Inqlude project as a member of their community. With the help of my mentor Cornelius Schumacher, I was able to do a good job for the open source community. Thank you Cornelius Schumacher, KDE community and Google.



Community Bonding Period




Week 1

The community bonding period for GSoC 2016 is from 23rd April - 23rd May. It runs throughout one month period. So I am now in the community bonding period. This is a good time to get prepared for the coding and to get deeper involved in the community. This also is a good time to start to contribute. 

During the first week of the community bonding period, I followed the instructions given by google and did the non technical tasks including submission of tax forms and registration for a payoneer account.

I also created a developer account in KDE, added Cornelius Schumacher as the mentor and uploaded the requested ssh keys. 

In the meantime, I cloned the Inqlude repositories and installed Ruby, Rubygems and Inqlude executable. Since I formatted my machine, I had to do all these things again to get ready with the project. I also ran the process to generate html views locally in my machine. In these ways, I set up the development environment for the project.

I also started creating my upcoming To-do list in todoist.com as this would be useful for me to keep track of things to do and remind me of their dead lines. I also asked my mentor if I need to use any special IDE for coding. I prefer using Sublime Text. He asked me to use whatever works best for me. Since he uses Kate or Atom for most of the coding, I installed them as well.

Week 2

I came up with an issue while modifying and viewing the modified html views of the web pages. While executing the project locally, I could generate the html views locally using 'inqlude view'. But I could not see the modified pages after doing the modifications. For instance, I changed a sentence in about.html.haml file and then used the 'inqlude view' command to generate the html views again. But that gave me the same page as before. So I assumed that I have gone wrong somewhere. I felt doubtful of the process that I carried out to modify the pages locally. 

After doing some research, I found the cause for this issue. What I did previously was modifying the html.haml pages in view directory of the inqlude project and then tried to view changes in html files. But I noticed that 'inqlude view --output-dir=OUTPUT_DIR' command uses html.haml files in view directory at '/var/lib/gems/1.9.1/gems/inqlude-0.7.4/view' location. When I did local changes to the files in that location and executed the 'inqlude view' command, I got the html views of modified page successfully. Then I wanted to know how I should commit and push any local change to the main repository. Should I copy those files in '/var/lib/gems/1.9.1/gems/inqlude-0.7.4/view' location to the view directory of the inqlude repo that I cloned and commit changes from my project location? So I sent a mail to the mentor to clarify my doubts. He explained me the underlying process and advised me to look into the code. 

The inqlude command takes the templates from a directory relative to where the `inqlude` executable is located. So if I call the local executable from my checkout it will use the local templates. So I changed the view.rb file inside inqlude executable to take the html.haml files from the view directory of my project location to generate html views. In this way, I resolved the first issue that I came across in the project.

I also played a little with the Inqlude codebase. I manipulated the html files to see how the basic html changes reflect on the final preview. 

Week 3

Community bonding period is also a good time to start to contribute. An easy way to contribute Inqlude is looking at existing libraries and checking if there are new versions, and if there are submit pull requests for updated manifests. So I started preparing my first pull request.  My mentor asked me to create pull requests for updating the libraries. He suggested me to start with one, so I can get used to the work flow and the tools.

I went through the project sources and home pages of most of the Qt libraries at Inqlude to check for their new releases and updates on meta data about those libraries. I found updates in meta data of lots of existing libraries at Inqlude. 

I searched all the unreleased libraries through their respective homepages and sources to find if they have latest versions. While doing that, I found the following new versions.

adctl0.1.1
kdreports1.7.0
mimetypes-qt41.0.1
qdatacube3.1.2
qjsonrpc1.1.0
qserialdevice0.4.0
qtav1.8.0
qtftp5.0.0
qthttp5.0.0
qtrest0.1.0
qtrpt1.5.5
qtWebSockets5.6.0

Actually some of them are latest releases. One library adds new platform support with its new release as well. I started creating my first pull request for Qtav qt library. I sent a pull request for updating the manifest of 'qtav' library in inqlude-data repository. Inqlude only had the generic manifest file for this library and I added three release manifest files for 1.8.0, 1.9.0 and 1.10.0 releases. Shown below is the manifest file that I created for 1.8.0 release.

{
  "$schema": "http://inqlude.org/schema/release-manifest-v1#",
  "name": "qtav",
  "release_date": "2015-09-01",
  "version": "1.8.0",
  "summary": "A cross-platform multimedia playback framework based on Qt and FFmpeg.",
  "urls": {
    "homepage": "http://www.qtav.org",
    "vcs": "https://github.com/wang-bin/QtAV",
    "download": "http://www.qtav.org/install.html",
    "announcement": "http://www.qtav.org/blog/1.8.0.html",
    "custom": {
        "Wiki": "https://github.com/wang-bin/QtAV/wiki/_pages"
    }
  },
  "licenses": [
    "LGPLV2.1+"
  ],
  "description": "QtAV is a multimedia playback library based on Qt and FFmpeg. It can help you to write a player with less effort than ever before.",
  "authors": [
    "Bin Wang <wbsecg1@gmail.com>"
  ],
  "maturity": "stable",
  "platforms": [
    "Windows","Linux","OS X","Android","iOS"
  ],
  "packages": {
    "source": "https://github.com/wang-bin/QtAV/archive/v1.8.0.tar.gz"
  }
}

While doing this task, my pull request failed due to a syntax error. Actually I had missed a comma in
the list of urls. So I learnt about Travis CI tesing as well. I corrected the syntax error and committed the changes along with manifest files for 1.9.0 and 1.10.0 releases. 

I had no idea on how Travis CI does building and testing software projects hosted at GitHub. So I studied about it and did some exercises to experience that workflow. You can find it at https://github.com/nanduni-nin/travis-broken-example. This made me understand how Travis CI works in inqlude-data project.
Meanwhile, I started writing a wiki about 'Finding new releases'. This was an interesting task. In this wiki page, I could describe the process I followed to find new releases of Qt libraries. I believe that this would be a motivation for all Qt application developers and Qt library developers to contribute Inqlude.

My mentor pointed out me a nice article on 'How to Write a Git Commit Message'' . That was very interesting. I learnt lots of things from that. 

Also, I did know only same basics of using git commands. So, I learnt to use 'git rebase' and I went through several docs to learn what that really does. So I merged all my previous commits into one and added a combined commit with title 'Add 1.8.0, 1.9.0 and 1.10.0 releases of qtav' along with a small description. 

I also did some layout and template edits to this blog to make it more simple and easy to navigate.

Week 4

During this week, I spent most of the time familiarizing myself with inqlude website and inqlude repository. I tried to understand how different pages are managed using inqlude command line client for Qt library archive.

I went through the inqlude code base and figured out how inqlude commands work. For eg: I tried to understand how 'inqlude view' and 'inqlude verify' works. 'inqlude view' command is useful to create a website in a specified directory from manifest files. 'inqlude verify' command is useful to verify a manifest file to look for proper syntax and other specific rules in manifest specification.

Meanwhile I tried to create and test a new page within the inqlude website. To get some idea, I created a web page for latest releases and tried to practice ruby syntax and haml templates.

I also tried to solve issue #19 on 'Align summaries on development page vertically'. For this, I had to do some minor changes in development.html.haml and few modifications on inqlude.css.

After all, I did not forget to update some new releases for qt libraries in inqlude-data archive. I added a new manifest file for qscintilla, which is a Qt port of Scintilla C++ editor control. I added its latest release 2.9.2. Shoen below is the corresponding commit message. I got this commit successfully merged into the inqlude-data repo. 

Add 2.9.2 release of qscintilla

Add version and release date.
Add link to the release announcement page.
Improve description.
Add platform support for 'OS X', 'Android' and 'iOS'.
Add source package for 2.9.2 release.


After having the wiki I wrote on 'Finding new releases' reviewed by the mentor, I added that to the inqlude-data repo after doing the proposed changes. For each way of finding a new release, I added an example library for the reader to get that idea properly.


Got selected to GSoC 2016 with KDE-Inqlude


I am very excited and happy to get to know that I have been selected for GSoC 2016 with Inqlude - KDE. First of all, let me offer loads of thanks to KDE for selecting me as a GSoC student of their organization. I am extremely happy to go ahead with Inqlude for GSoC 2016. It is indeed a lifetime achievement for me.

I would also like to thank Mr. Cornelius Schumacher for the massive support that he gave me to drive towards this achievement. Thank you for all your advises and keeping me on right track since day one. I am indeed privileged to have had you as my mentor and I always find you as an exemplary character in my life.

I will do my best to make this project a successful and useful one for the KDE organization and all its users. I plan to maintain this blog through out the project period to update my progress on the project.

So, I would like to welcome all of you to the blog I created to reflect my contributions towards the project on improving Inqlude Website. This blog will be updated each week with a moderate description about the progress done during the past week. The updates could also include the challenges faced, solutions tried and the solutions found for the challenges during the respective week.

Other than the progress reports, I would publish posts about other interesting stuff related to the project. For example, I might write a wiki on guiding users to contribute Inqlude which is a potential option for the proposed project.

All of you are welcome to read and share your thoughts with me regarding anything related.

Note: Here is the link to my project proposal that brought be this wonderful opportunity.

Cheers!!!

Getting To Know GSoC




GSoC !!! It's one of my dreams that I wish to accomplish in my life. Yet, it is an expectation of all open source contributors.

I came to know about the GSoC programme during an event held at my university. The speaker at the event announced that,
"We are proud to say that for the 7th consecutive year, University of Moratuwa has claimed the top spot with 39 accepted students in 2013!"

I felt very happy to be a student at such a reputed university out of all the universities all over the world. This feeling motivated me applying for Computer Science and Engineering during the field selection process that held in the second year of my university life. At that time, I was a newbie to programming. The first programming language I learnt was C, which is a very basic language and a good option for any one to start with. Then I started working out programming problems at projecteuler.net, which is a site containing thousands of mathematical and logical problems. This made me very happy and I got almost addicted to it. I wanted to solve more and more problems to get my name in the top list of ranks. It was difficult to find solutions for several problems with only data types like 'int'. Hence I wanted to deal with very long integers. This made my way to learn Java which helped me to solve lot of problems in that site. This is how I started programming. Whenever someone ask me on how to get started with programming, what I recommend is to start solving little problems in Projecteuler and then gradually start working out difficult problems as there are many readily available resources in internet to learn any programming language very easily.

I got to know that Google Summer of Code is a global program that offers students stipends to write code for open source projects. I was always expecting to take part in a GSoC project. It is one of my life dreams, not for money, but I want to prove myself that I am capable to accept any challenge. As I believe, GSoC is an opportunity to convince our selves that we are capable of completing some project task within the given time period under the guidance of a mentor. There are many enthusiastic young programmers who wish to have their own startups. GSoC would definitely be an opportunity for such individuals to convince themselves that they will not fail, yet they can go far ahead.

One day, when I was studying at my university library, I thought of going through the last year's project ideas list for GSoC. Meanwhile, I came across KDE organization which drew my attention. It was at that time that I decided to get in touch with KDE community. During that time, mentoring organizations had not started submitting applications to Google. So I thought to wait, but I continued to study last year's KDE project ideas, their contributions and their motivations.

When KDE published their GSoC project ideas, I went through all the ideas. I found several projects that match with my interests. After going through the ideas and project prerequisites, I determined to involve in an 'Inqlude' project. I found the project on improving the Inqlude website interesting because I always prefer UX stuff. The prerequisities for that project had been satisfactorable since I am very familiar with Linux, HTML, JavaScript, JSON etc. I am quite familiar with Ruby as well which I had been used few times for my internship projects.

To get started, I studied the Inqlude website and got myself familiar with the website environment. I have heard that the golden rule for winning a GSoC proposal is to start early as possible. I subscribed to the required mailing lists. I sent an email mentioning my interests on that particular project. I felt very happy from the first reply and so I continued the discussion with my mentor.

I felt very comforatble and happy to work under the guidance of an amazing mentor, Cornelius Schumacher. It is mainly because of his guidance and motivation that I continued to progress through this project.  I am always very grateful to him and I am looking forward to join my hands more and more with KDE community.