Analysing Inqlude Website


Today, I carried an analysis of the current Inqlude website. Then I came up with a set of suggestions to improve functionalities of the website. I was basically focusing on rendering a better user experience.

Here are the problems and suggestions that I noted.

1. Add a filter box such that when we type a letter or a piece of text, libraries starting with that piece of text are filtered. I came up with this suggestion as a solution to minimize scrolling. I believe that users including myself prefer minimal scroll. This would come in handy when we use this website with mobile devices. 

2. Add a small drop down pointer at the end of that filter box to search libraries by different options such as version, platform, licence etc. The user can tick the desired option and select the corresponding libraries. Otherwise, it would also be better to keep separate drop down boxes to different options like platform and licence so that we can provide user the facility to select(tick) a platform or a licence or both if required and then select that relevant platform or licence. This is the intended task given in the GSoC idea description. 

3. Add responsive layout. The current website is lack of a good responsiveness when it comes to small scale devices such as mobiles. In order to make responsive layouts, I thought of using media queries.

4. On the development versions page, the summaries of the libraries are only vertically aligned within each section, but not across sections. This should be fixed to make the page look more balanced. This is issue #19 which I found from the inqlude github issues list. I would like to resolve this issue during my project.

5. I feel that it is sometimes difficult to identify the particular summary description for the library although they are horizontally aligned in the table. I would like to propose two colors ( one row in white back ground / next row background in little darker than pure white) for adjacent rows. This will make the user easy to go through different rows. 

6. Remove the close button near search button on top of the website or else add some functionality to it. I realized that it does nothing currently.

7. Show latest releases on web page. It would be nice to have a section with latest releases on the web page, so user know which libraries have been recently updated. This is issue #22 which I found from the inqlude github issues list. I would like to resolve this issue during my project. I thought of adding latest releases as a separate page similar to 'stable releases'.

8. Apply justify alignments for the content in pages 'How to contribute' and 'About'.

9. Add a search box so that when user add some key words from summary of each library in manifest file, the search results will show the relevant libraries along with their summary text. I wanted to suggest this as there is no option in the current site to find libraries if the user does not know the name of the library exactly.
eg: User wants to find a a library that provides integration of QML and KDE Frameworks. So user can type 'QML' in the search box and search results will display the library name 'kdeclarative' and summary if needed. 

I am not sure if the search box at the top of the web site is designed with this intention. Currently, this search box does a google search. 

10. Search button near the google search box does not match with the existing web layout. Its color, size and orientation should be modified.

11. Look and feel of the website is okay. It would be nice if we can use a different color for the top ribbon of the website (not a completely different color, but not pure white). This is because that I felt difficult in distinguishing the title of the website with its content. 

12. Lack of consistency thorough the site. When we move to sections : 'development versions', 'unreleased', 'commercial' and 'all', the description text of the website that appear with 'Stable libraries' section disappears. I feel it as a bad UI design. It is good to keep that description in all those aforementioned pages.

13. At the top ribbon of the website, the links to 'About', 'How to contribute', 'How to find libraries' seem unnoticed and rarely being used by the users. We need to make those tags/links look more attractive and noticeable.

14. Add some title to the table of libraries. For eg: Library name and description. This is because that I myself felt difficult to understand what these two columns are about.

15. Add some small description of the library to appear on hover over the library name. This is because that most modern websites(eg: facebook) follow less navigation across pages which many users prefer.

16. This is an additional suggestion. Why don't we add the link to mailing list in the page of the library?

17. Add some quality indication. This is issue #17 in Inqlude github issues list. It would be nice to have some indication on the web site, which shows this quality depending on certain criteria.

18. Integration tests for web site. To make sure that the web site doesn't break, we should have integration tests which check that the generates pages for the web site meet the required expectations. More details are included in issue#28. Integration tests should cover generation of proper HTML, checking for navigations, checking for display of library details, checking that data consumed by programs is correct, such as the JSON for all libraries, checking that the search is generated correctly and works and checking that the comments are generated correctly and work.

I believe that aforementioned problems and solutions would be very useful during the implementation of this project. 



Using Inqlude Command Line Tool


Inqlude command line tool is a basic component of Inqlude project. Inqlude comes as a Ruby gem. It can be easily installed and it provides a command line interface to handle Qt libraries in a similar way as Ruby gems. There are commands to install libraries, list available libraries and installed libraries, and more. They are as follows.

1. Create new or updated manifest
  inqlude create <manifest_name> [version] [release_date]        
2. Create manifests from git checkout of KDE frameworks module
  inqlude create_kde_frameworks <frameworks-git-checkout> <output_dir> 

3. Download source code archive
  inqlude download                                                      
4. Information about how to get involved
  inqlude get_involved                                                  
5. Describe available commands or one specific command
  inqlude help [COMMAND] 
     
6.  Install library                                         
  inqlude install  
      
7. List libraries                                               
  inqlude list                                                          
8. Create release manifests for KDE frameworks release
  inqlude release_kde_frameworks <release_date> <version>               
9. Review pull requests on GitHub. Use 'username:branch' as repo parameter
  inqlude review <repo>                                                 
10. Show library details
  inqlude show <library_name>                                           
11. Scan system for installed Qt libraries and create manifests
  inqlude system_scan    

12. Uninstall library                                              
  inqlude uninstall                                                     
13. Verify all manifests or specific file if filename is given
  inqlude verify [filename]                                             
14. Create view
  inqlude view -o, --output-dir=OUTPUT_DIR                              
Libraries are described by manifest files, which are maintained in a separate git repository. Inqlude integrates with this git repository and uses it as the list of available gems. This repository can be found at https://github.com/cornelius/inqlude-data.

There are 3 basic ways to get Qt libraries. 

1. Using the web site at https://inqlude.org. There you can find the information about available libraries, and then you can get the libraries using the provided links. This is the recommended way for now.


2. Using the command line client from package. This client makes it easy to get the libraries you need with just a few commands, without having to know URLs, or how libraries are packaged. There are 2 ways to get the command line client. They are as follows.
         - Download its sources from download.kde.org. Link is here.
         - Otherwise, clone the repository. Use command line command as follows.

nanduni@nanduni-TECRA-M11:~/myproject$ gem install inqlude

3. Using the command line client written in Ruby

This can also download libraries. But this is mostly aimed at maintaining the inqlude data. This is available as a Ruby gem. 
See if you have rubygems installed in your machine. If so, you can simply use the following command to install inqlude. Otherwise see rubygems.org to get Rubygems. 
nanduni@nanduni-TECRA-M11:~/myproject$ gem install inqlude
Now that you have command line client set, you can use inqlude commands to get libraries. To get the set of available libraries, use the following command. 
nanduni@nanduni-TECRA-M11:~/myproject$ inqlude list -r

You can easily install a library with following command.
nanduni@nanduni-TECRA-M11:~/myproject$ inqlude install <library_name>

You are able to view the set of installed libraries using this command.
nanduni@nanduni-TECRA-M11:~/myproject$ inqlude list

This is how I experimented the functionality of Inqlude command line client.

References


Play With Inqlude Local Environment


Inqlude is a tool to handle Qt based libraries. It provides developers an easy way to find, install, and use libraries, in particular third party libraries. A public version of the library runs at http://inqlude.org

The website is written in static HTML and so there also is an option to generate an HTML overview of all available libraries. This can be hosted or used locally. In this blog post, I am going to explain how it can be done. 

At first, I thought that we require a Sinatra server or a Tomcat server to host this locally.  After getting it clarified from the mentor, I was able to generate the pages and browse it from the file system. This guide would definitely help you try that.

Step 1

Create a specific directory at a preferred place in your file system. I have named the directory as 'myproject'. Clone the Inqlude github repository into it. 

nanduni@nanduni-TECRA-M11:~$ mkdir myproject
nanduni@nanduni-TECRA-M11:~$ cd myproject/
nanduni@nanduni-TECRA-M11:~/myproject$ git clone https://github.com/cornelius/inqlude.git
Cloning into 'inqlude'...
remote: Counting objects: 1684, done.
remote: Total 1684 (delta 0), reused 0 (delta 0), pack-reused 1684
Receiving objects: 100% (1684/1684), 292.55 KiB | 210.00 KiB/s, done.
Resolving deltas: 100% (1085/1085), done.
Checking connectivity... done.           

Step 2

Navigate into the 'myproject' directory where you will see a new directory called 'inqlude'. This contains the repository that is cloned.


Step 3

There is a command line client, written in Ruby. It can download Qt libraries, but it is mostly aimed at maintaining the inqlude data. This client is also useful to execute inqlude commands using inqlude executable. It is available as a Ruby gem, so you need to install rubygems first. Use the following command if you have not installed Ruby and Rubygems in your machine. Debian GNU/Linux and Ubuntu use the apt package manager. You can use it like this:
nanduni@nanduni-TECRA-M11:~$ sudo apt-get install ruby-full

Step 4

Now you can install the inqlude gem executable. 
nanduni@nanduni-TECRA-M11:~$ sudo gem install inqlude

Step 5

Now you can play with inqlude commands. You can get help about the available inqlude commands using the following command. 
nanduni@nanduni-TECRA-M11:~/myproject$ cd inqlude/
nanduni@nanduni-TECRA-M11:~/myproject/inqlude$ inqlude
Commands:
  inqlude create <manifest_name> [version] [release_date]               # Create new or updated manifest
  inqlude create_kde_frameworks <frameworks-git-checkout> <output_dir>  # Create manifests from git checkout of KDE frameworks module in given ...
  inqlude download                                                      # Download source code archive
  inqlude get_involved                                                  # Information about how to get involved
  inqlude help [COMMAND]                                                # Describe available commands or one specific command
  inqlude install                                                       # Install library
  inqlude list                                                          # List libraries
  inqlude release_kde_frameworks <release_date> <version>               # Create release manifests for KDE frameworks release
  inqlude review <repo>                                                 # Review pull requests on GitHub. Use 'username:branch' as repo parameter.
  inqlude show <library_name>                                           # Show library details
  inqlude system_scan                                                   # Scan system for installed Qt libraries and create manifests
  inqlude uninstall                                                     # Uninstall library
  inqlude verify [filename]                                             # Verify all manifests or specific file if filename is given
  inqlude view -o, --output-dir=OUTPUT_DIR                              # Create view

Options:
  [--version], [--no-version]    # Show version
  [--offline], [--no-offline]    # Work offline
  [--manifest-dir=MANIFEST_DIR]  # Manifest directory
You can find all the available inqlude commands there. Let's try one of them. 

If you want to know how you use install command with inqlude, use the following command.
nanduni@nanduni-TECRA-M11:~/myproject/inqlude$ inqlude help install
Usage:
  inqlude install

Options:
  [--dry-run], [--no-dry-run]    # Only show what would happen, don't install anything.
  [--version], [--no-version]    # Show version
  [--offline], [--no-offline]    # Work offline
  [--manifest-dir=MANIFEST_DIR]  # Manifest directory

Install library

Step 7

You have one last thing to do to view the website locally. Use the following command and it will generate the output views of pages in a new directory called  OUTPUT_DIR which will be created inside inqlude directory. Otherwise, you can specify the OUTPUT_DIR instead of using that name.
nanduni@nanduni-TECRA-M11:~/myproject/inqlude$ inqlude view --output-dir=OUTPUT_DIR
Creating web site in 'OUTPUT_DIR' from '/home/nanduni/.local/share/inqlude/manifests'

You will notice that a new directory called OUTPUT_DIR has been created. This contains the html views of all pages in view directory. For each html.haml page in view directory, a new html page has been created inside OUTPUT_DIR. Now you are able to view these pages through browser.


You can modify the code and look for those corresponding changes locally as well. Hope this guide would be useful for newbies to Inqlude. 

Getting Started !

Every challenging task raises the question "How to start?". So happened with me. I thought of various ways to get started.

  • As an initial step, I started peeping into the code base of Inqlude. Since I have an understanding of what inqlude does by now, I started finding inqlude git repository. Yet I found the following two repositories.
1. Inqlude, the Qt library archive at https://github.com/cornelius/inqlude. Inqlude is a tool to handle Qt based libraries. It provides developers an easy way to find, install, and use libraries, in particular third party libraries. A public version of the library runs at http://inqlude.org.[1]
2. Inqlude data repository at https://github.com/cornelius/inqlude-dataThis is the repository for library meta data of Qt based libraries for Include, the independent Qt library archive.[2]

  • I determined to maintain a 'to do' list in which I will be adding all tasks, references, tutorials, videos and other resources that I need to look into. I will also be adding there what things I need to do next, so that I can complete them one by one or simultaneously. I hope that this would help me not miss anything by any case. On the other hand, this would definitely increase productivity and I would be able to measure my own progress too.
  • Meanwhile, I thought of creating my draft proposal without hurrying to do it at the last minute. So I started creating it and I managed to jot down different things in point form whenever I find something which is worthwhile to include in it. 

  • I looked into the inqlude repository[1] which is the actual work space for my project. I found that most of the work that I need to implement is within the 'view' section. The views are written in HAML. Each page has an associated html.haml file. I went through the code and tried to understand what languages and templates used in it. I went through the issues list, where I found several issues with regard to the website. I thought of including them in my project proposal to clear them during my project period. Some of the issues were directly related to my project task, so I communicated in those threads as well.

  • Also, I thought of doing an analysis of the Inqlude current website so that I can understand its shortcomings related to search and categorization. I came up with a set of problems, weak points and shortcomings in terms of providing a better user experience. Then I listed them and came up with solutions on my own. I thought of getting other's feedback to justify my solutions and even to come up with better suggestions.  

  • Then I started learning Ruby. As the mentor advised, I started following some online resources to get myself familiarized with Ruby. Currently, I am following these materials.
1. Ruby with some online video tutorials by Jake Day Williams.
2. Ruby with tutorialspoint.
3. Mentor recommended me to follow http://exercism.io/ which helps learning Ruby along with exercises.
4. Haml with http://designshack.net/articles/html/save-loads-of-time-by-writing-your-html-with-haml/

  • Meanwhile, I thought of learning Human Computer Interaction principles via some online material. I hope that this knowledge would be useful to improve my design thinking. I also found some presentation slides on HCI module from my seniors which I will be doing in my next semester. Those slides are based on the book 'Human Computer Interaction' - 3rd edition by Alan Dix - Janet Finlay - Gregory Abowd - Russell Beale. I thought of going through them so that it would be useful for this project.


  • Then I started learning about designing responsive websites. I came up with several suggestions for implementing responsive layouts for the current website. They are as follows.
1. Use frameworks like W3.CSS which is free to use and no license necessary.
2. Set a meta view port tag, create a flexible layout / fluid grid, use media queries in CSS file.
3. Create responsive websites with Django. 

After having these approaches discussed with the mentor, he suggested me to use media queries to design responsive layouts as this is a simple website, so using different frameworks would make it complex. I also think that it is better to use simple approaches for accomplishing targets without making things complex.

In order to learn the usage of media queries with CSS, I referred following materials which explain things very clearly.
1. https://www.youtube.com/watch?v=aPtA4nYkvDw where I studied about creating three style sheets with css configurations for small, medium and large screen sizes separately.
2. http://www.youtube.com/watch?v=ZKy0kIZB9y4 where I studied about screen size responsive dynamic style layouts. There I learnt to program real time CSS layout changes relative to the screen size of the user device or browser window as they re-size it.

I learnt following concepts too.
1. The Viewport
2. Viewport Units
3. Media Queries
4. Navigation
5. The Foundation 5 Grid

  • The mentor asked me to take time and prepare a plan on my project so that I would be able to come up with very good designs for the website. He pointed out me a a good document that explains the process of coming up with a good design. You can find  that document on product design sprint here. 

He also supplied me a document on how he has applied that method to a project he did for his HCI class. You can find it here. 

He proposed me that using a similar approach for the design of the Inqlude web site will give good results. In fact, that was an awesome document, where he has recorded details on how he has come up with UI designs for "I will travel" website. I was amazed by his approach taken towards need finding, prototyping, building prototypes, user testing and finalizing prototypes. I felt very interested with this approach and I understood that success of the project lies mainly on developing good designs which I would be able to derive using this approach.

  • I developed some storyboards and prototypes as well. I sketched several storyboards on paper. Then I came up with several prototypes as well. For that I used two mock up tools called moqups and balsamiq. They were very useful tools to create nice prototypes. 
  • Then I tried to visualize this site locally in my machine. With guidance from the mentor, I was able to view it using 'inqlude view' command. I used different inqlude commands to try out different actions. Then I edited the code to view changes accordingly. 

  • I used inqlude command line tool to see how it works. For that I followed instructions at How to get libraries page in inqlude website. So I  cloned the inqlude-client github code, installed inqlude using gems and installed libraries. 

  • I went through the structure of the manifest files, inqlude-data repo and those respective files. Inqlude manifest format is described in following doc. 
https://github.com/cornelius/inqlude/blob/master/manifest-format.md

  • You can find all data in one JSON file available at http://inqlude.org/inqlude-all.json, which contains the data for the latest version of all libraries. This is the most convenient way, if you just want to have the current data. Yet this was very helpful for me to understand the process.
In these ways, I tried to get some understanding about all components such as Inqlude command line tool, manifest format and website. 

  • While going through all these approaches, I thought of documenting and recording my work somewhere which I always used to do when doing various project tasks. So I maintain this blog expecting that this would not only be useful for me, but for whole open source community who are interested in contributing to "Inqlude".

I hope that this blog post would be very helpful for any one who wish to start contributing to Inqlude. Please add your comments if you have better approaches of getting started with contributing to Inqlude.


News From Inqlude, the Qt Library Archive

I found the blog of Cornelius who is my mentor, where he had recorded his marvelous ideas and experiences. It contains lots of interesting posts. I found several posts that are related to my project task too. 

In that blog, I found a post that explains me about 'Inqlude'. The post was titled as 184 Qt Libraries. I found the importance of writing blog posts too. In open source community, it is a good practice to write posts on what we do so that another contributor can get help from those posts some day in future. 

The post had attached a video on "Cornelius Schumacher - News from Inqlude, the Qt library archive", which was very important to figure out what 'inqlude' actually is. In this video, he nicely pronounces his name which I was worrying how to pronounce since a long time.

These are the notes which I took from the talk of Cornelius Schumacher at Qt Developer Days 2013.


Qt is a great library that contains lots of stuff and functionalities. There are many libraries based on Qt that provides additional functionalities such as fancy graphics for applications, authentication, protocol implementation etc.

Problem

It is not always easy to find the library that is required for our purpose. If you google for Qt libraries, you will find about eight million of libraries. Of course, googling is not a good approach to find these libraries. 

Solution

A group of KDE people at a meeting came up with a solution to this problem, and the basic idea was to build one curated archive of all Qt-based libraries.

Benefits

As an application developer, you have one place to find your libraries and as an library developer, you have a central place where you can publish that. One place where everything goes together collecting all the nice Qt libraries which are out there.


Then they came up with a fancy name: "inqlude" which is also easy to remember.

Concept came up with three parts.

1. Format for Qt library meta data -  structured way of collecting meta data for libraries so that you can actually work with them.


2. Tooling - Provide extra tooling, tools to process meta data, search for specific aspects, create presentations of this data.
nanduni@nanduni-TECRA-M11:~/inqlude/website/inqlude$ inqlude
Commands:
  inqlude create <manifest_name> [version] [release_date]               # Create new or updated manifest
  inqlude create_kde_frameworks <frameworks-git-checkout> <output_dir>  # Create manifests from git checkout of KDE frameworks module in given ...
  inqlude download                                                      # Download source code archive
  inqlude get_involved                                                  # Information about how to get involved
  inqlude help [COMMAND]                                                # Describe available commands or one specific command
  inqlude install                                                       # Install library
  inqlude list                                                          # List libraries
  inqlude release_kde_frameworks <release_date> <version>               # Create release manifests for KDE frameworks release
  inqlude review <repo>                                                 # Review pull requests on GitHub. Use 'username:branch' as repo parameter.
  inqlude show <library_name>                                           # Show library details
  inqlude system_scan                                                   # Scan system for installed Qt libraries and create manifests
  inqlude uninstall                                                     # Uninstall library
  inqlude verify [filename]                                             # Verify all manifests or specific file if filename is given
  inqlude view -o, --output-dir=OUTPUT_DIR                              # Create view

Options:
  [--version], [--no-version]    # Show version
  [--offline], [--no-offline]    # Work offline
  [--manifest-dir=MANIFEST_DIR]  # Manifest directory

3. Website - One place to find and publish Qt libraries. 

Current state of inqlude

  1. Format for meta data in a JSON file: Meta data includes name, release date, release version, information about licence, status of library, available platforms, available packages etc.
  2. In terms of tooling, inqlude has a command line tool which is also called 'inqlude' and it has a number of functions to list, install, remove, show libraries. 
  3. Website is also there running at https://inqlude.org. Libraries are categorized as stable libraries, development versions, unreleased and all. Each library has a page where you can see all the data. You can find details about where to get that library and how to get that library. You can also add comments and discuss about the libraries. There are links to download additional information as well. 

Technologies used


Random set of technologies are used in inqlude. 

- JSON for meta data format.
- Ruby to process data, create website.
- Website is static HTML with some CSS integrated with Google and Disqus to provide search and discussions.
- Hosted in a git repository so that it is easy to provide new patches for libraries or find what was already there.  

This is an open source project, so all infrastructure are free software. You can find them easily in Github and KDE repository in order to download, modify and test it. It is an open platform, so that it is not limited to specific libraries or make some libraries prominent than others. Hence it is open for everybody. This is run by KDE community.

One final message given by Cornelius during this talk is, if you know about a new Qt library or any new release of a Qt library, talk to him or write an email to inqlude@kde.org mailing list where you can discuss things further. If you want to contribute, he would be welcoming patches as well. 

Meet The Mentor


I found this diagram when I was looking for what mentorship is. In order to complete any task successfully, we need some kind of guidance and assistance. Otherwise we will be moving to wrong directions, wrong decisions and even into worst conditions. As the diagram demonstrates, a mentor provides us support, help, advice, guidance and assistance. I am glad that I found a mentor with all those qualities.

I believe that a GSoC project requires a good relationship in between the mentor and the student. For that, we need to maintain a good means of communication. When I selected and decided to work on this project, what I did first was subscribing to the KDE and Inqlude mailing lists. On 7th March, I communicated my interest on this project with my mentor via an email. There I introduced my self.

"I am Nanduni Nimalsiri, a third year undergraduate at Department of Computer Science and Engineering, University of Moratuwa, Sri Lanka. I would like to take part in GSOC Programme 2016 with KDE Community."

In my first mail, I mentioned my interest on the project idea : Improve categorization and search on inqlude website. I also mentioned about my doubts regarding the project and I asked him about the approach that I need to follow to proceed with this project. I waited eagerly for a reply. It was after one day (8th March) that I got a reply. I was very happy and my interest for the project increased more and more. The first few words which my mentor had mentioned in his email were,

"Hi Nanduni,
Welcome. It's great that you are interested in this project."

These words inspired me. It was a great welcome.  I felt that it is a privilege to be a part of their community. 

Let me introduce my mentor. He is Cornelius Schumacher, an open source Software developer from German, which is a country far away from Sri Lanka. He has been a core KDE contributor since a long time. He was the main developer and maintainer of KOrganizer for many years too. He is a Qt user since Qt 1.1 and he has authored and maintained a significant number of Qt and KDE applications and libraries. 

Recently I read a blog about him : Meet Cornelius Schumacher - Akademy Keynote Speaker. It's really interesting. I like to get to know how giant people in the industry enjoy their lives amidst busy schedules. I prefer its section on "Behind the KDE scene" very much. Cornelius's ideas on Akademy and open source technology are very interesting. I felt very proud of myself to be in touch with KDE community and I am really really looking forward to be a part of it.


Journey commenced in this way. I always try to clarify the doubts through my mentor. He advised me to focus on design aspects rather than implementation which can be done after coming up with a good set of designs. I was asked to learn Ruby and he pointed out some interesting sites for that too. So the journey proceeds ... 


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.