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.

What we already have
Currently we have only a single watchlist in which the user keeps pages which is important. Eg: Pages which he edits/creates, pages which he reads, pages which follows regularly. The current way if fine if the list is small.

Problem
As the size of the Watchlist increases its effectiveness decreases. It becomes tougher for the user to keep track of different kinds of pages he refers(as mentioned above). Due to the size user deletes lots of pages from the Watchlist forcibly to make it small. There is no way to get back the deleted pages from the watchlist which again a major issue. Many times user has to go to his watchlist->preferences and then change his options to see his relevant pages in his watchlist which is very inconvenient.

Solution
Have multiple watchlists which I will call as a WatchGroup. This will help users to group their pages in the way they want Eg. Having separate watchgroups for pages which he creates, edits, follows etc. This will also help user to maintain groups in order of preference, thus not deleting articles forcibly.

This will help user to organize his pages in his own way which will increase his efficiency. As a result we can expect increase in quality of the articles and quality reviewing of articles, which is one of the main goal of MediaWiki.

Provision for getting back the deleted articles will also help him to retain articles in case of accidental delete.

Required deliverables

 * Improve the user experience handling 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.
 * To have relevant hooks defined.
 * Have a page containing the creation details of a group(s).
 * Well documented (I always do this for any size of code, learnt it the heard way).
 * Informative error handling and error reporting.

If time permits
Eg: When a user clicks on a page to unwatch it, dim that page name.
 * Extensions equivalent to CollaborativeWatchList, WatchSubpages.
 * Implement a very user friendly UI for easy shift of pages from one group to another.
 * While adding a new page to the watchgroup, suggest user groups to which the page can be added.
 * 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. Designs of the hooks will also be finalized.

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 implement changes as suggestions come.
 * 30th June -- 1st May - will document 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(due to unpredictable delay) 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
One of the reasons I like MW is that people on #mediawiki and #wikimedia-dev are active and respond in no time. I will be hanging out all the time on these channel, be active during and after GSoC.
 * IRC

I have subscribed to various MW related mailing list and thus I will be using this often and very effectively to ask doubts and suggestions. For Eg: WikiTech for technical doubts, mediawiki-api for APi related doubts ,mediawiki-codereview- for code review related stuff.
 * Mailing List

I will sending weekly(may be more often) report to respective mailing lists.

I will maintain a blog(or equivalent) in which i will be posting all the stuff which happens during the GSoC.
 * Blog

I have good understanding of git and I have my own account in git with few projects. Now that we have migrated to git, it will be easy for me to integrate the code.
 * Git

If I have doubts or require suggestions then I will first approach my mentor and then obviously #mediawiki(cause this channel rocks) and mailing-list.

Past open source experience
MediaWiki is my first open source encounter and I am part of this community for past three months. My contributions to mediawiki includes number of patches - 1, 2, 3, 4, 5, 6, 7 and bug report with patch 8. There are lots of patches on which i am working and will be submitted soon. I have participated in lots of hackathons including the hackathon by MW in Chennai.

I am a leading web-developer in my college and I have worked on many sites( | IITM techfest, | My hostel site, IITM cultural-fest site ).

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
I have given basic definition of classes, though there is code for some of them, i have listed it down for sake of completeness.
 * To have Specialpages for
 * Special:WatchGroup.

Display all the groups with details.
 * Special:EditWatchGroup.

Add/Remove/ChangeName/Change_prefernce order - will have a table with the features mentioned.Even a raw method will be include(if time permits).
 * Special:WatchGroup/groupname.

Display all the pages of the given group like the way it is done currently for watchlist.
 * Special:EditWatchGroup/groupname.

User can add/remove pages from a particular group like the way it is done for the watchlist.
 * Special:ShiftPageWatchGroup.

To shift pages from one group to another(if time permits).
 * Special:DeletedWatchList.

To view the pages which the user has deleted.These pages can also form a group.


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


 * Extensions(if time permits)
 * 1) Watchers
 * 2) Watchsubpage
 * 3) CollaborativeWatchList
 * 4) Semantic Watchlist
 * etc


 * Others
 * 1) Define action for watch/unwatch and page to be displayed after user clicks on watch which will show him the list of groups available.
 * 2) More to be added soon.