User:Bagariavivek/GSoC Application/melange

Project summary
The main goal of the project is to revolutionize the way WatchLists are used.

What we already have
Currently, we only have a single WatchList in which the user keeps pages which are important. For example, pages which the user edits/creates, pages to be read or pages which the user follows regularly. The current WatchList format is efficient only if the number of pages is limited.

Problem
As the size of the Watchlist increases, its effectiveness decreases. It becomes tougher for the user to keep track of the different kinds of pages. A large sized WatchList forces the user to delete pages in order to keep it to a manageable size. Another problem is that it is not possible to get back pages which have been deleted from the WatchList.

Solution
I propose to have multiple WatchLists each of which will be called a WatchGroup as a whole. This will help users group their pages in their desired manner. For example, having separate WatchGroups for pages which he creates, edits, follows etc. This will also help the user to maintain groups in the order of preference, thus allowing him to retain all the pages he needs.

The WatchGroup structure will increase a user's efficiency. As a result, we can expect an increase in the quality of articles and better editing and reviewing of articles due to improved visibility. A provision for getting back deleted articles will also help the user to retain articles in case of accidental deletion.

Improve the current( referring to Watchlists) User Interface by displaying information in tables. This will improve the visualisation of the information.

Required deliverables

 * Increase user efficiency by enabling quick access to the required pages.
 * Allow users the share a WatchGroups. This will increase the speed at which edits are reviewed.
 * Provide the facility to shift pages from the user's current WatchList to the WatchGroup. This will ensure smooth transition from WatchList to WatchGroups.
 * New UI to improve the visibility.
 * Have required APIs to access the data in the WatchGroup.
 * Incorporate hooks at the required sections of code.
 * Have efficient SQL Queries.
 * Document the code well (I do this for all codes, regardless of size. I learnt it the hard way).
 * Have Unit tests and Internationalization support.
 * Error handling and informative error reporting.

If time permits

 * Ajaxify some parts of the code.
 * Add extensions equivalent to WatchSubpages.
 * Suggest to the user WatchGroups to which a new page can be added.

Project schedule
I have official summer holidays from 1st may to 10th Aug. Thus, after two days of enjoyment, work begins. During holidays I will be working 38-42 hrs/week.

(3stMay-23rd May) -- "The Ramp up time".
 * Fixing design of WatchGroup and relevant code required. Interview various users, in order to understand their needs completely. Designs of the hooks will also be finalized.

I have divided my work into two milestones.

Milestone 1(23rd May -- 9th July)
Develop SpecialPages mentioned below(Prototype for 3 pages has been completed). After this pages can be added to WatchGroups by using the SpecialPage. Develop actions like watchgroup  and unwatchgroup  for WatchGroups. Now,pages can also be added/removed using Develop the various APIs mentioned below. Now, pages can also be added/removed/timestamped via APIs. One of them is completed in the prototype Testing and reviewing the code with other developers. Changes will be implemented alongside. Implement the changes suggested by other developers. Final documentation of the code. Merging with trunk. Test the code again and make bug-fixes.
 * 23rd May -- 30st May (1 week)
 * 1st June -- 6th June(1 week)
 * 1) '?action=(un)watchgroup&watchgroup=groupname'(completed in the prototype)
 * 2) '?action = watchgroup' will redirect them to a page with a list of their watchgroups.
 * 7th June -- 14th June(1 week)
 * 15th June -- 25th June(10 days)
 * 23rd June -- 30th June(1 week)
 * 30th June -- 1st May(2-3 days)(Parallel documentation will be taking place along with the above)
 * 1st July -- 5th July
 * 6th July -- 9th July

Milestone 2(10th July - 9 Aug )
Work related to shifting pages from one group to another and allow users to share watchgroups. Testing and reviewing the code. Documentation of the whole code. Merging with trunk.
 * 10th July -- 24th July(2 week)
 * 1) SpecialPage for shifting pages between WatchGroups, sharing of WatchGroups.
 * 2) Create actions for shifting.
 * 3) APIs for shifting articles and sharing WatchGroups.
 * 25th July -- 31st July(1 week)
 * 1st August -- 3rd August
 * 4th August -- 10th August(1 week)

The time from the 10th to 20th August is buffer time which will be used to complete unfinished work(due to unforeseen delays).

Note:My college starts on the 10th of Aug, so I will be working 20-22hrs per week from the 10th.

About you
I am a 19 year old from Bangalore, India. I am currently pursuing my 2nd year undergraduate studies in Electrical Engineering in IIT Madras, Chennai. I have been doing web development for the past 2 years and I code in many languages like C, C++, Java, PHP, Python(django), JS etc. I commit myself to projects that excite me and which I believe will have a positive impact. I am a very fun loving person who mingles quickly with people.

I have seen MediaWiki from the users' point of view and this project means a lot to me because it will have a major and immediate impact on the user. I want to stress again that this project will take MW a step higher upon its implementation. I would love to continue my work with MW even after this. Therefore, this project means a lot to me as I consider this as my first major step towards becoming a WMF developer.

Participation
One of the reasons I like MW is that people on #mediawiki and #wikimedia-dev are active and respond in no time. I will spend a considerable amount of time(i.e. 24 hours -sleeping -eating) on these channels. I will be active even after GSoC.
 * IRC

I have subscribed to various MW related mailing lists and I will be using these often and hopefully, effectively, to ask doubts and take suggestions. For example, WikiTech for general technical doubts, mediawiki-api for API related doubts etc.
 * Mailing List

I will sending weekly(or perhaps even more frequently) reports to respective mailing lists.

I will also write a blog on which I will post all the things which happen during GSoC.
 * Blog

I have a few projects in git and now that we have migrated to git, it will be easy for me to integrate the code.
 * Git

Past open source experience
MediaWiki is my first encounter with open source and I have been a part of this community for the past three months. My contributions to mediawiki include a number of patches - 1, 2, 3, 4 and a bug report with  5. There are lots of patches on which I am working and will submit them soon. I have participated in various hackathons including the hackathon by MW in Chennai.

I am one of the prominent web-developers in my college and I have worked on many websites like ( | techies, | hostel, cultural-fest).

Progress done

 * 1) A working prototype - https://github.com/vivekkuamrbagaria/WatchGroup
 * 2) UI of the page displaying WatchGroups - http://upload.wikimedia.org/wikipedia/mediawiki/1/1d/Wikipage.jpg

Some of my past projects

 * 1) College website for communication between coordinators of any event(ERP) - https://github.com/vivekkuamrbagaria/ERP.
 * 2) Android Mobile App for college cultural festival -https://github.com/vivekkuamrbagaria/Saarang2012.
 * 3) Project to make a low cost Blood Pressure measuring device for Rural India - https://github.com/vivekkuamrbagaria/BP_Mesurement

Proof of concept code
I have implemented some of the class mentioned below in the above mentioned prototype. Suggestions are most welcomed :)

Special Pages

 * 1) Special:WatchGroups.
 * 2) SpecialShareWatchGroup.
 * 3) Special:EditWatchGroups
 * 4) Special:WatchGroupPages/.
 * 5) Special:EditWatchGroupPages/.
 * 6) Special:DeletedWatchPages.
 * 7) Special:ShiftPageWatchGroup.

Mediawiki web APIs

 * 1) ApiWatchGroup
 * 2) ApiQueryParticularWatchGroup.
 * 3) ApiFeedWatchGroup.
 * 4) ApiShiftWatchGroupPages.
 * 5) ApiListDeletedPagesWatchGroup.
 * 6) ApiCreationDetailsWatchGroup.

Others

 * 1) Define action for watch/unwatch.
 * 2) More to be added.