User:Bagariavivek/GSoC Application

Identity
Name: Vivek Kumar Bagaria Email: vivekee047@gmail.com Project title: WatchList => Revamping the WatchList structure to incorporate groups.

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 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.

Required deliverables

 * Increase user efficiency by enabling quick access to the required pages.
 * Provide the facility to shift pages from the user's current watchlist to the watchgroup.
 * Have required APIs to access the data in the watchgroup.
 * Incorporate hooks at the required sections of code.
 * Have efficient SQL Queries.
 * Have a page containing the creation details of the user's watchgroups.
 * Document the code well (I do this for all codes, regardless of size. I learnt it the hard way).
 * Error handling and informative error reporting.

If time permits

 * Ajaxify and incorporate JS for better visualization.
 * Add extensions equivalent to CollaborativeWatchList, WatchSubpages.
 * Suggest to the user watchgroups to which a new page can be added.

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 SpecialPages mentioned below After this pages can be added to watchgroups only by using the specialpages. Develop actions like watch  and unwatch  for watchgroups. Now,pages can also be added/removed using '?action=(un)watch&group=groupname'. Using '?action = watch' will redirect them to a page with a list of groups Develop the various APIs mentioned below Now, pages can also be added/removed/timestamped via APIs. 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( I don't know how to do this as of now). 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
 * 30th June -- 1st May(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. Testing and reviewing the code. Documentation of the whole code. Merging with trunk.
 * 10th Jul -- 26th Jul
 * 1) SpecialPage for shifting pages between watchgroups.
 * 2) Create actions for shifting.
 * 3) APIs for shifting articles.
 * 27th Jul -- 31st Jul
 * 1st Aug -- 2nd Aug
 * 3rd Aug -- 6th Aug

The time from the 6th of Aug to the 20th 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 involved in web development for the past 2 years. I code in 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 always seen MediaWiki from the users' point of view and this is why 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 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
Yet to fill this section

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.