User:Bagariavivek/GSoC Application

Identity
Name: Vivek Kumar Bagaria Email: vivekee047@gmail.com Project title: WatchList => Bring revolution in the way Watchlist is used by the user

Contact/working info
Timezone: Bangalore ,India .UTC + 5:30 hours Typical working hours: 9 am to 3am IRC or IM networks/handle(s): potter on Freenode

Project summary
The main goal of the project is to revolutionize the way watchlists are used. Currently we have a only one watchlist for a user which gets long very fast and thus losing its effectiveness. My project aims to able user maintain multiple watchlists(WatchGroup) ,which will help user organize his pages effectively and prevent user from using external sources for keeping the log of the pages.

This will be very helpful for users who edit and read a lots of articles as they can group pages according to their preference using watchgroup. This will directly effect the quality of articles especially in Wikipedia as editors and readers will be able to manage their pages very effective manner.This will also prevent user to forcibly delete his articles from his watchlist to shorten it. The user need not each time go to preferences->watchlist and change their options to view their watchlist in the way they want.

Required deliverables

 * Improve the user experience to pages/articles using watchgroup.
 * To rank the groups in the list of watchgroup.
 * Provide facility to shift pages from current watchlist to the watchgroup.
 * Have required API's to access the watchgroup effectively.
 * Have some default group which will.
 * Well documented (I always do this for any size of code, learnt it the heard way)
 * Error handling.

If time permits
Eg: When a user clicks on a page to unwatch it, dim that page name.
 * Implement a nice UI for easy shift of pages from one group to another.
 * Suggest the user the group among the watchgroup which he adda the new page.
 * Have a page containing the creation time of a group and relevant details.
 * Ajaxify and incorporate JS for better visualization.

Project schedule
I have official holidays from 1st may to 10th Aug. Thus after two days of enjoyment work begins. During holidays I will be working 45-50 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.

I have divided my work into two milestones.

Milestone 1(23rd May - 9th July)
Develop required SpecialPages mentioned below After this pages can be added to watchgroup only by using the specialpages. Develop actions like watch ,unwatch. Pages can also be added/removed using '?action=(un)watch&group=groupname' or using '?action = watch' will redirect them to page listing out list of groups and the user will select one. Develop various API's mentioned below Pages can also be added/removed/timestamped via API's. Testing and reviewing the code with other developers. Implement the changes suggested by other users. Final documentation of the code. Merging with trunk( i currently don't know how to do this). Test the code again and make bug-fixes.
 * 23rd May - 1st June
 * 2nd June - 8th June
 * 9th June - 21st June
 * 22nd June - 25th June
 * 23rd June - 30th June, parallel with above )
 * 30th June - 1st May, will do this in parallel with the all 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. Testing and reviewing the code. Documentation of the whole code. Merging with trunk.
 * 10th Jul - 26th Jul
 * 1) SpecialPage for shifting articles between group.
 * 2) Actions for shift.Eg : ?action=watchshift& newgroup=groupname& oldgroup=groupname.
 * 3) API's for shifting articles.
 * 27th Jul - 31st Jul
 * 1st Aug - 2nd Aug
 * 3rd Aug - 6th  Aug

From 6th Aug to 20th is buffer time which will be used to complete unfinished work and to integrate with other parts of MediaWiki.

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

About you
I am doing my 2nd year Undergraduate in IIT Madras, Chennai. I have been in web development from past 2 years.I code using C, C++, Java, php, python(django), JS  etc. I always commit myself to activities which are exciting and will have great impact.I am a very fun loving person and I mingle very fast with people. I am a prankster too ;) . At the same time I am very hard working and committed person.

I always saw MediaWiki from the users point of view and this is why this project means a lot to me, cause this has huge and immediate impact on the user. I want to again stress that this project will take MW a step higher by solving a very essential problem. I want to continue my work with MW even after this. Therefore this project means a lot for me as I consider this as my first official step towards being a WMF developer.

Participation
We don't just want to know what you plan to accomplish; we want to know how. Briefly describe your work style: how you plan to communicate progress, where you plan to publish your source code while you're working, how and where you plan to ask for help. (We will tend to favor applicants that demonstrate a clear vision for what it means to be an active participant in our development community.)

Past open source experience
My contributions to mediawiki includes number of patches - 1, 2, 3, 4, 5, 6, 7 and bug report with patch 8. I have participated in lots of hackathons including the hackathon by MW in Chennai.

Any other info
Please add any other relevant information -- UI mockups, references to related projects, a link to your proof of concept code, whatever. There are no specific requirements, but we love to see people who love what they're doing. Show us you're excited about this project and have an interest in the background and are considering how best to make your idea work.

Basic Structure of the Code
Display all the groups with details. Add/Remove/ChangeName - will have a table with the features mentioned.Even a raw method will be include(if time permits). Display all the pages of the given group like the way it is done for watchlist. User can add/remove pages from a particular group like the way it is done for the watchlist. To shift pages from one group to another(if time permits).
 * To have Specialpages for
 * List of Groups(Special:WatchGroup).
 * Add/remove group from the watchgroup(Special:EditWatchGroup).
 * WatchList of a particular Group(Special:WatchGroup/groupname).
 * Add/remove pages from a perticular group(Special:EditWatchGroup/groupname).
 * To shift pages from group to another(Special:ShiftPageWatchGroup).


 * To have API's like
 * 1) list of all the groups
 * 2) list of pages from a particular group
 * 3) WatchListRSSFeed for a particular group.
 * 4) Shift pages from one group to another
 * 5) Recent changes in a particular group.
 * 6) Overall recent changes in all the groups.