Trysts with my GSoC Project - PART II


This blog entry concludes my GSoC 2013 project and in this I am going to describe my stint with it during the latter part of the timeline after the midterm evaluations.



To know more about the project , please see my first post : Trysts with my GSoC Project - PART I and Plasma Media Center . 

Well , continuing from where I left in the earlier post , with the guidance of the mentors ,  a new look was given to the PMC Browser. After this , we took to a new feature of extending the subtitle format from .srt ( already implemented in PMC) to .sub which remained to be implemented. The patch yet cannot be shipped and we are waiting for Qt to fix the metaData.videoFrameRate property without which we cannot really get the frameRate of the video. Nevertheless, I did learn a lot from this task which involved me to understand the difference between the subtitle formats , the mathematics involved in it in the conversion of .srt subtitle to .sub  and finally I got to use the QFile API as well. Ofcourse the new thing learned was QRegExp also. I got to know how to write the regular expressions in the programs.
The patch can be viewed here: https://dl.dropboxusercontent.com/u/107169565/subtitleExtension_patch.diff

It was around mid of July when KDE's Annual Conference: Akademy 2013 was taking place and my mentors were there conducting BOF sessions for Plasma Media Center. So some of my time was spent in fixing minor minor things in PMC from a user point of view. 

After this, I started working on a feature which we promised for PMC and that is of searching in the media browser . This required a pre-study into the relevant already written code. This involved using the pre-built supportSearch() function and then using RegExp at the relevant place. In all , this feature was made into a separate branch which would be soon merged after GSoC at the correct time. 

Relevant Request Entry : https://git.reviewboard.kde.org/r/111770/diff/#index_header  and https://git.reviewboard.kde.org/r/111801/diff/#index_header

Commit Message on #plasma IRC                                                          
After this , it was decided that we need a Folder Preview ( as you might have seen in Dolphin Browser System in PMC). Basically it gives an artistic view to the file browser.

PMC after the Folder Preview Implementation

Relevant patch which got merged as a branch in master : https://git.reviewboard.kde.org/r/111863/diff/#index_header

I also learnt working on CMake Files during this task.

After this came one of the best parts of being involved in open-source software development and that was getting an opportunity to release the RC Version of PMC 1.1 which somehow gave me an experience of how to changeLogs , create Tags, file a ticket in KDE System , making tarballs etc etc and above all what do we actually mean when we say we are releasing a version of a software!

Uploading a ticket on SysAdmin

ChangeLog for RC Version Commit on #plasma IRC

This was the relevant blog entry about the RC Release : Plasma Media Center 1.1 Release

Now in the near end of the project , I started working on the most challenging part which we need to implement after the feedback sessions of PMC in the Akademy Conference in Spain. This was the new feature of "Adding Media to Collections" . For this obviously , I needed to first study the nepomuk code in the nepomukserverkcm files. First my target was to create an option for the feature on homescreen.  With this I got further knowledge of CMake Files and how to create a .desktop file for a backend and model. Then we had to design a basic UI to see a list of paths indexed by nepomuk for PMC.  After doing that and pushing the code in a separate branch , I worked to make the backend ready to update the nepomuk config file.  I actually got to learn a lot working on nepomuk and I would like to thank Vishesh Handa , Shantanu and Sinny for guiding me throughout this task and helping me when I got stuck. Since this was a relatively big task , extensive UI Designing still needs to be done after GSoC timeline.

New Backend for Adding Media to the PMC Collections


On opening the backend, one can see the list of already indexed paths

Branch Link : https://projects.kde.org/projects/extragear/multimedia/plasma-mediacenter/repository/show?rev=akshay%2Fpreview-indexing

Documentation is also one of the most important part of any software since it provides the newcomers with a stepping stone to understand the project code much easily. So , in the last week of my project , I devoted some time to document the classes I wrote and some others also in which I worked. Even in this documentation work , I got to know about KDE Documentation and all which made this task pretty interesting despite the general apprehension over documentations by coders !

PMC Documentation Patch can be viewed here : Documentation

Well now on a personal note , I would like to thank the whole KDE Community , Google for providing me with this nice exposure and opportunity, my mentors Sinny and Shantanu for their great guidance and motivation throughout the project, PMC Developers Sujith and Deepak for also helping me whenever I needed their help and ofcourse my family, colleagues and friends without which the dream of participating in GSoC would not have been possible. My post GSoC plans is to continue contributing in KDE which I have been doing from some time now. The entire journey was truly remarkable and cannot be forgotten :)

Cheers!

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

Plasma Media Center 1.1 RC Release



RC has been tagged for Plasma Media Center (PMC)’s 1.1 release. The first release of the software received a lot of appreciation and feedback, some of which have been implemented in this particular release.
You can view pictures, watch movies and listen to your favourite music all at one common place-PMC. Now, there is no more hassle of choosing different apps to enjoy the multimedia files.



New Features

After the beta release , there were few fixes and promised features for the main release which we have incorporated in this version. 


  • Show list of all music as default in All Music mode
                In the All Music mode , now PMC shows the list of music files by default. Earlier , this was not the case and user had to navigate to the "songs" tab to see the list of all music files. This feature was suggested in the user feedback sessions during Akademy 2013.



  • Play All button repositioned 
              For a better UI and convenience , the Play All button has been shifted towards the center of the PMC screen.




  • GridView scroll using Mouse Wheel
              This is a functionality added for a better experience of Plasma Media Center with the mouse. The horizontal scrolls in the GridView can be done using Mouse Wheel now.



To know about all major bug fixes and features of the release , please have a look here: http://sinny.in/node/33 

Install


Please follow http://sinny.in/node/25 to install Plasma Media Center on your machine.



Wiki


To know more about Plasma Media Center, check out the wiki http://community.kde.org/Plasma/Plasma_Media_Center


Thanks to Sinny , Shantanu and Sujith for giving me this opportunity to contribute in PMC and be a part of this release ! 

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

Trysts with my GSoC Project- PART I


This blog entry is all about my work in the past month as a part of my Google Summer of Code Project to improve and enhance the powerful KDE Application -- Plasma Media Center .




Just to reiterate for the new readers,  Plasma Media Center is an innovative step in redefining the user experience where media - such as photos, videos, songs etc. are combined in one KDE application. Users can view pictures, watch movies and listen to their favourite sound tracks all at one common place. 

My initial few commits in the plasma-mediacenter repository involved implementing minor features and removing existing bugs in the application. 

Certainly, I would write about my very first patch for plasma-mediacenter which solved Bug 319626 . This couple line patch gave the user an option to delete the items on the media playlist without stopping the currently playing media. I also changed the text style of playlist items to Sunken and enabled "-" option in front of every item by simply removing a QML Code line in PlaylistDelegate.qml file :

visible: listViewItem.ListView.isCurrentItem

It worked as intended and was pushed into the main repository of plasma-mediacenter by my co-mentor Shantanu Tushar as I didnt had master commit rights back then. It was a good feeling to produce a patch, though small, which got integrated in the main repository of the software ready to be used by millions of people !!

Next few patches were dedicated to enhance keyboard navigation in the Picasa backend of the PMC(Plasma Media Center). Earlier, Picasa Album login in the PMC didnt support keyboard navigation. First thing which I implemented in this was to enable the ENTER key to LOGIN when the username and password credentials are entered. The thought behind this was that almost everyone after entering the password liked to press the ENTER key in order to log-in . So PMC not offering this feature was a concern.  So here is my patch which I created then in order to accomplish this :  https://git.reviewboard.kde.org/r/110488/diff/#index_header

After this, what I thought was to extend the keyboard navigation functionality in the Picasa backend by implementing QML KeyNavigation Element in the existing qml code. This was a small patch which enabled the PMC user to use TAB Key to navigate in the login credentials in the Picasa backend Login screen. Details of this patch can be viewed here:  https://git.reviewboard.kde.org/r/110512/

Both of these patches were committed and pushed into the main repository, before which I was given the KDE Commit/Developer Rights with the help of my GSoC mentor Sinny. It was great to ship the working patches into the main repository of PMC.

Snapshot of the KDE Reviewboard

There were more small hacks on PMC source code , few of them unsuccessful also but well that is the beauty of open-source software development.  Even if your code is not in its best state , you can keep hacking it, learn and get it perfect ! For example, a very small patch was merged in the repository which enabled the user to press ESCAPE key to go back one level in the PMC Filesystem browser. Basically , right from our start,  our intention is to make PMC application fully keyboard navigable.  This was one small step in this aim .

After this, with the help of my mentors, I worked on Bug 317451 which in a nutshell demanded a way out to go back to the main media being played with a single click when the user is on PMC Homescreen.

HOMESCREEN
Media Player

So after a short discussion it was decided to use the empty space on PMC Homescreen to add this feature that when media is being played in the background of the homescreen , if the user clicks anywhere in the empty screen , the mediaplayer / slideshow/musicplayer opens up as shown in the above picture.


I used the concept of QML Signals and Slots and QML Mouse Events to implement this feature. 

Snapshot of the REVISION history in the KDE Projects PMC Repository.

After a couple of more small patches which includes a minor feature to considerably dim the image or the video being played when it is viewed at places other than slideshow or the video player respectively. This was an attempt to improve the readability of other items on screen when we browse the filesystem while watching a video for instance.

After this, I worked on relatively a bigger thing than solving bugs and adding small features. We now wanted to revamp the entire filesystem browser and change the way PMC file-browser worked earlier. For this, it was important to understand Qt Model/View Architecture and Programming. Learning it was extremely enjoyable and before hacking on plasma-mediacenter source-code, I even made a small  Desktop File Explorer in process of learning which is uploaded on Github : https://github.com/akshayratan/FileExplorerApp 

Leaving the coding details, in short, the look of the file browser was changed. This particular task gave me immense confidence in my project. I dealt with C++ models (LocalPlaces and LocalFiles) and QML Views to be precise. The concept of abstraction and inheritance also came handy while implementing the instances of the LocalPlaces Model in the code.
I also got to learn a bit more about CMake files during this time.



#plasma IRC Snapshot of master branch commit


Picture Shot Comparison of PMC FileSystem Browser homepage before and after this patch------

Earlier HOME contents were by default shown and left side panel was used to browse directories


Now more dynamic and easier Drive browsing capability of PMC is there. User can easily browse through directories etc.
After a small fix for an application crash, I recently started working on an implementation of a stack data-structure to enhance the navigation flow in PMC. This was an awesome suggestion by my co-mentor Shantanu.

So, I implemented a stack to store the browsing URLs and thus ensure that the user can select another drive by coming to the PLACE MODEL screen on pressing escape/back required number of times. Further, earlier on clicking BROWSE Pics/Music/Videos , PMC took us to the last browsing folder but now we get back to the PLACE MODEL screen on clicking it which is more convenient for the user as he/she has all the options again to browse whatever drive they want to.  
QStack Library was used.

The details of the diff patch can be viewed here: https://git.reviewboard.kde.org/r/111337/diff/#index_header

I am completely enjoying my work and challenges that usually come with it. It has been an awesome learning opportunity for me till now and I hope it continues to be a knowledge-enriching journey throughout the project. It is always a great joy to work with extremely supportive mentors ksinny and Shaan7 as they are popularly known on IRCs and also the KDE Community. It has been a nice exposure so far for me and I look forward to hack on PMC even more to make it better.

The release of the beta version of the Plasma Media Center is up soon , probably in less than a week. It would be great if the readers then can test and report bugs to solve. 

I will try and keep updating about the progress of my work in this GSoC project ! Signing off for now...

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

GSOC 2013 Project Proposal


        Improvements and Enhancements for Plasma Media Center

Short description: Plasma Media Center is an innovative step in redefining the user experience where media - such as photos, videos, songs etc. are combined in one KDE application. Users can view pictures, watch movies and listen to their favourite sound tracks all at one common place. No more hassle of choosing different apps to enjoy the multimedia files. Recently Plasma Media Center’s very first version was released. Built on Plasma and KDE technologies it is designed to offer a rich experience to media enthusiasts. This project offers to make Plasma Media Center even better with improvements in the existing features as well as enhancements to this powerful application. One such major proposed addition is to layout a keyboard navigation scheme so that each part of PMC can be usable by the keyboard alone. Features such as addition of Dropbox plugin and polishing of existing online services are also proposed.

Name:  Akshay Ratan

Email Address:  akshayratan@gmail.com

Freenode IRC Nick: akshay_r

IM Service and Username:    Skype, akshay_ratan

University:  Dhirubhai Ambani Institute of Information and Communication Technology, Gandhinagar (DA-IICT)

Location (City, Country and/or Time Zone):  Gandhinagar/Lucknow, India. GMT: +5:30






Proposal Title: Improvements and enhancements for Plasma Media Center

Abstract:  Plasma Media Center is an innovative step in redefining the user experience where media - such as photos, videos, songs etc. are combined in one KDE application.

Users can view pictures, watch movies and listen to their favourite sound tracks all at one common place. No more hassle of choosing different apps to enjoy the multimedia files.
Recently Plasma Media Center’s very first version was released. Built on Plasma and KDE technologies it is designed to offer a rich experience to media enthusiasts.
This project offers to make Plasma Media Center even better with improvements in the existing features as well as enhancements to this powerful application. One such major proposed addition is to layout a keyboard navigation scheme so that each part of PMC can be usable by the keyboard alone. Features such as addition of Dropbox plugin and polishing of existing online services are also proposed.

Motivation for Project :   

The motivation for this project comes from the fact that this year KDE's GSoC theme is Polishing Existing Things, and what is better than working on an application which I love using, has a potential to be an extremely powerful application and needs to be polished for better productivity and an enriched user experience.

Apart from this, as it is a relatively new software application in KDE, it would give me a great chance to work with KDE developers closely in making the application better and richer. Since the pre-requisites for this project are C++ and basic Qt, I would love to work on this project as it suits me perfectly. I have a good  knowledge of C++, Qt, Git and Cmake. I have already started learning QML, built the source code and delved into the PMC codebase.

Implementation Details:

Alongside the aim of KDE GSoC this year to polish the applications, my project would try and accomplish the aim of adding few more features to the Plasma Media Center.

  • Improve the feature of subtitles in the video player of PMC: For any good media player, the feature of subtitles is a must. The project aims to remove the bugs in the existing subtitle provider class and make it working. Apart from this, the aim is to extend the readability to more than just .srt file.
  • Folder Preview in Local Media Browsing:: Just as Dolphin has the feature of folder preview on mouse scroll, the project has a motivation of implementing the folder preview feature in the folders inside PMC.
  • Improving the overall search: This is a community idea which is very popular in existing media devices for example, Google Play. Searching on the basis of album name, artist name and song search would be active. Even when inside a file system browsing, listing of search items,letter wise would be there.
  • Categorizing media better : Categorizing songs on the basis of tags, grouping albums with the help of metadata of videos using Webminer and Nepomuk Indexer. DigiKam has the feature of tag categorizing too.
  • Polishing online services and adding a Dropbox plugin: PMC presently has backend implementation for fetching media from Picasa and Flickr. Extending this backend support for cloud storage would not only make PMC Application better but also put it forward in the line of top image viewer applications.


Feature requests in the UI of the existing plugins would also be taken care of as per the tentative discussions with the community users and the mentors: Sinny Kumari and Thomas Pfeiffer.

  • Laying out keyboard-navigation plan: PMC currently supports the use of arrow keys extensively only when it comes to keyboard navigation. My idea is to structure a clear keyboard-navigation layout which in the initial stages at least supports ---
       *  Escape Key: What is already implemented is that when we are inside
the menu to view pictures/videos/music, pressing escape key takes to main
menu but when we are actually seeing the pictures by opening the gallery, then
escape key should be there to go to main menu and similar other cases. Some
implementation insights on this::

Qt::Key_Escape can be used. A very very short approach::   
                                        
       
       * Backspace Key: PMC currently lacks this feature of using backspace key to go one level up. Just as arrow keys are used to view pictures left to right and vice versa, backspace tool would be great as users can entirely control it using keyboard. Further, a relevant bug(though not exactly same) is already there on bugs.kde.org .


       As per the discussions with the mentor, we have to redesign the flow so that keyboard navigation is possible. This is one such feature addition which would be the priority of the project. The handleKey() function will be used extensively.  Further plans will be redesigned as per the work flow through the project in summers.

KEYBOARD-NAVIGATION MOCK TEST CASES-

The idea is to make the PMC fully usable through keyboard as much as possible.
  1. Suppose, Mr. Specter starts the PMC Application and goes to ‘Browse Pictures’ using arrow keys. He presses ENTER key but now wants to go to his mounted drive to view a specific picture folder. He has no option but to use his mouse to click. Instead TAB key can be used to navigate the specific column and options in the UI. Sample Tab options can be seen in the image link below-


    2. Mr Specter starts viewing the pictures in the slideshow. In between, he
wants to exit to the main screen. An ESCAPE KEY implementation so
that by pressing it in between the slideshow, takes the user to the main
screen would be good for the application.

Image Link-  


    3. Similar is the case with Backspace key. It should take the user to one
step above at whatever level of hierarchy he is currently in. In PMC, the
current facility is using mouse to click ‘One Level Up’ option. Extending
this with the feature of backspace key would be a big plus.

For more information and image ::


These are just few usage of main keys of keyboard to smooth the PMC Application usage. This can be extended to other parts of PMC also.



  • Documentation and testing
Since the PMC application is new, simultaneously I need to work on documentation.

Tentative Timeline (in weekly intervals until 2 weeks after the end of GSoC):

Coding, documentation and bug fixing will be more or less done simultaneously in phases as mentioned below so that much work is not left for the last. Also after a particular feature review by the mentor, I would merge the branch with the master then only and not wait till the end of GSoC Program to merge.


May 4-June 16 (Pre-selection period and Community Bonding period)
  • Reading the codebase for Plasma Media Center and understanding the flow of application code thoroughly .
  • Discussion with mentor and the KDE Plasma Community regarding the project to take valuable feedback.
  • Discussion with the mentor(s) for any change in the project abstract plans.
  • Fixing small code issues(if any), planning extensively for the keyboard-navigation plan and UI design for subsequent online service like Dropbox would be included in this period.

Coding PHASE I

June 16 - June 30 (2 weeks)

  • Implementing keyboard-navigation in the PMC as discussed with the mentor.

July 1 – July 14 (2 weeks)

  • Work on polishing online backend support and implementing account-sso to manage online plugins.
  • Improvement of existing UI in the existing plugins as will be discussed with the mentor.

July 15 – July 29 (2 weeks)

  • Cleaning the new code, starting with documentation, bug-fixing for Phase-I
  • Mid-term evaluation

Coding PHASE II

July 30 – August 13 (2 weeks)

  • Implementing the subtitle feature for the video and music player of PMC.
  • Bug-fixing for the above mentioned task.
  • Researching for libraries to enable folder preview like dolphin in PMC.

August 14 – August 28 (2 weeks)

  • Implementing the Folder Preview feature for Plasma Media Center.

August 29 – September 16 ( More than 2 weeks)

  • Implementing improved search and categorizing media better (If time permits)
  • Cleaning the new code, documentation, bug-fixing for Phase-II

Pencil down PHASE III

September 17 – September 23 (1 week)

  • Wrapping up the project
  • Documentation
  • Cleaning the code
  • Submitting the final code for evaluation and integration in the main repository.

Do you have other obligations from late May to early August (school, work, vacation, etc.)? Please note that we expect the Summer of Code to be a full-time, 40-hr a week occupation. It is important to be clear and upfront about other commitments that you may have during that time.

No, I don't have any other obligation other than my GSOC Project in KDE and intend to devote more than 40 hours a week for this project. My college vacations are from early May to late July. Also just after college reopening, there would not be any load due to college curriculum, so I would be able to devote my maximum time towards my project. I am even ready to work at the weekends if the project demands so. The fact that I am applying for GSoC only in KDE and not any other organization proves the fact that I am focused on single organization for the project in which I love working.
Besides this, I appeared for the Google Code Jam Competition 2013 which is a programming competition by Google of which I have cleared the qualification round. There are few online rounds of 2.5 hours in May, but that’s not at all a hindrance to my main focus-GSOC Project.

POST GSOC 2013:

After GSOC if time permits I would like to do the following---

  • Bug-fixing in PMC
  • Adding a feature of Opening up a file with PMC. Currently, there is only an option for that, but the file does not open-up in PMC. I would proceed to fix these kinds of minor issues after my GSOC project.
  • I would like to implement the feature of adding multiple items to the playlist at once.
  • Actively involved in maintaining and contributing to the PMC Project
  • Keep contributing to KDE

About Me:  

I am a 20 year old ICT( Information and Communication Technology) undergraduate student at Dhirubhai Ambani Institute of Information and Communication Technology (DA-IICT),Gandhinagar, India. I am very passionate about programming and coding from a very young age. I am a person who always wants to learn new things. I am thus a quick learner and a person who does not give up early. I like to learn from my mistakes. Even when learning, I research a lot and do not hesitate to take help , ofcourse after web surfing a lot.

I have a keen interest in data structures, algorithms and programming. Besides this, I am a tech person who is always updated with different technologies and the impact it has on society. As a software developer, my intention is to make softwares which not only enrich user experience of the computers but also help the society in general. I am a Linux user from past 3 years.

I had done a project in the Summer of KDE 2012 on KmouseTool application. One thing I just love about being in KDE is that the developers really support each other as well as the newbies to make open-source bigger and better. I really find myself lucky to be involved in such an awesome open-source community.

Besides coding, I am a persistent blogger who writes about programming, technology as well as on social issues.
Link to my blogs:

On the soft skills part, I believe I have leadership qualities with excellent communication, writing and analytical skills. I am the Deputy Convener of the Google Developers Group, DA-IICT and the Core Committee Member of The Debate Club,DA-IICT. I also coordinated the KDE Meetup 2013 and Synapse 2013(Annual Cultural Festival,DA-IICT).

Technical Skills:

       Operating Systems:
       Linux(Ubuntu, Kubuntu, Fedora), Windows, Android ICS
       
       Programming Languages:
       C, C++, Java, Python and familiar to using REST API's
       
       Web designing skills:
       HTML, CSS and familiar to JavaScript

       Mobile Technology:
       Android Development and started with Windows 7 App Development

Open-source tools and technologies:
Qt, QML, Git (Github), and comfortable with Cmake and build processes.

  
Junior job link (provide a link to a small task in KDE that you have done. It is not mandatory but will increase your chances of getting accepted considerably. If you don't know what to work on have a look at http://kde.org/jj or ask a mentor):



PMC Patches :




Other links::


  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS