Catalogue for MediaWiki extensions

Catalogue for Mediawiki extensions
 Public URL: Complete proposal here.

 Bugzilla report: Bug 46704

 Announcement: 

Name and contact information
 Name: Aditya Chaturvedi  Email: aditya.iiita102@gmail.com IRC:  zeek on freenode, channels: #mediawiki and #wikimedia-dev
 * Web Page / Blog / Microblog / Portfolio:Mediawiki User Profile: Adi.iiita
 * My Blog: https://apexkid1.wordpress.com
 * Linkedin: Aditya

Location: Allahabad, India (UTC+05:30) Typical working hours:  11 am - 5 pm (IST) and 10 pm - 2 am (IST)

Synopsis
Extensions form a core component of mediawiki which allow it to be enhanced by addition of functionality. There are currently about 2000 extensions available on MediaWiki.org. However, for users of wiki, it is hard to identify and assess which extension fits a particular need. Moreover, for developers, there is no place to highlight their creations among the wiki users.

Currently, a third party site WikiApiary maintains data on extensions in a structured manner and and is tracking MediaWiki use in the wild. The idea is to make this process more intuitive and ensure good browsing experience, by making enhancements to Wikiapiary to accommodate more information about extensions in a structured manner and integrate some form of user feedback system while also improving the overall user interface to enrich user experience. Along with this, the plan is that this extended information gained on WikiApiary will be syndicated back to MediaWiki.org. .

Possible mentors

 * Markus Glaser, Mark Hershberger

Different phases of the project
Phase I: Implementation of User Feedback System- This phase will be mainly targeted at integrating a user rating system for the extension catalogue so that users may able to rate the extensions individually and independently.The overall rating of an extension shall be calculated based on multiple metrics such as user rating and count of wiki's using the extension.

To do this there are some options available in the form of extensions to add rating system to wiki. The current options available are: Extension:SemanticRating and  Extension:Ratings.
 * Customize the extensions to make it adaptable with the new implementation and integrate with WikiApiary.


 * Update any templates or forms in the system to make the rating system obvious and available to logged in users.


 * Encourage anonymous users to create an account or log in if they want to rate an extension or skin.

Phase II: Data Syndication- In this phase of the development, the aim is to feed the information gained on WikiApiary about extensions back to MediaWiki.org. This will include ratings and website count. This will involve creating a bot which will excess the API to extract information and perform updates. The bot will be placed in the cluster of Wikiapiary bots to run periodically.
 * Create a Bot that will do the task of information exchange between WikiApiary and MediaWiki.org.
 * For communication, an account of WikiApiary can be used by the bot on MediaWiki.org.
 * Setup authorization and authentication mechanism for accessing the MediaWiki.org API for fetching infomaton.
 * There will also be a need of parsing the existing Extension pages for getting the required data available there.
 * The last part of data syndication would be scheduling the jobs for the bot.

Phase III: UX enhancements- This part of development aims to enhance the presentation layer of WikiApiary to make it more intuitive and fun to browse around for users.
 * Work on the CSS to make elements more distinct.
 * Add one click access to catalog from the main page.
 * Restructure the landing page to show dynamic information about extensions like most popular (based on ratings) and recently added.
 * Restructure the catalog design to improve presentation.
 * Add filters to the search like sort by ‘launch date’, ‘popularity’, ‘website count’.

Phase IV: Addition of new attributes- This phase shall be community driven and experimental to extend the amount of information stored about each extension on wikiapiary. Technically this will include increasing and modifying the attributes for extensions. Some new proposed attributes are: Category, Size, Release date, Screenshot image.
 * For this, I shall collaborate with the mediawiki community to review the importance and need to each proposed attribute.
 * Get suggestions on modification of existing attributes.
 * Prepare a final Documentation for the new set of attributes proposed with their benefits and drawbacks and present the proposal within the community for further work.
 * See into possibilities of using WikiData in future.

Deliverables
After successful completion of this project following features will be added to the catalog project:
 * A user-review system in form of ratings to Wikiapiary.
 * Data syndication system between wikiapiary and mediawiki to reflect back the gained information.
 * Improvements in UX of wikiapiary and search filters.
 * Proposal for new set of attributes for extensions based on community feedback.
 * Manual and Documentation

Timeline
== Detailed Timeline ==

April 22nd to May 6th
Examine codebase/coding standards,  bond with the community better and plan out finer details of the project.

May 7th to May 18th  - Design
During this period I will work on the design of the entire implementation and discuss it with the community. The idea would be to come with the object oriented design which will allow extensibility in future for the newly added features.
 * Use Case Diagram (drill into detail about every possibility, high-level view of the App)
 * Update the existing CRC & Class Diagram  (Functional Independence) to incorporate new features.
 * Build WireFrame Models for interface designs and get community opinion.

May 19th to June 17th - Phase 1 (Rating system)
By default, to display the average rating the extension uses this query
 * Integrate semantic rating system. Using this, users can review an extension page. In this example, each review is itself a wiki page in category Reviews. Each review page has a property, Item, that is a link to the extension page being reviewed. Each review page also has a property, Rating, that has a value between 1 and 5.
 * Develop a generic algorithm to calculate final ratings.

This needs to be modified to utilize count of wikis using the extension. ( Look on how )
 * Reflect the final ratings back to catalogue view.
 * Work on the templates (Template:Extension and Template:Skin) to make the ratings available to users browsing MediaWiki.org.

June 18th  to July 14th - Phase 2 (Data syndication)
During this period I will work on the Data Syndication phase of the project.
 * For this, I will be extending the existing WikiApiary bot, creating new asynchronous worker tasks.
 * For communication of bot with MediaWiki.org, the existing User:WikiApiary account can  be used as a bot account on MediaWiki.org to add additional information to Template:Extension or an additional template.
 * WikiApiary uses the simplemediawiki module to work with the MediaWiki API. This can be used to login to MediaWiki.org and perform API actions.
 * Parsing the existing extension pages on MediaWiki.org can be done easily using the mwparserfromhell Python module. This will allow programmatic access to templates and easy reading and writing of new data.
 * WikiApiary Extensions are allotted to hour and day that allow the bots to schedule activity across them. Information that is updated to MediaWiki.org on a daily basis will be scheduled using the hour segment. Less frequently updated information is scheduled using both the day and hour segment, resulting in a weekly update. The work is placed on the queue by a Python worker invoked via cron, then executed using the Celery distributed task queue as an asynchronous task. This is the same framework that WikiApiary uses to collect information from 15,000+ MediaWiki websites.

July 15th to July 25th - Phase 3 (UX)

 * The work in this phase will require to Add css classes. Look into the adaptability of using css frameworks like Bootstrap.
 * Adapt catalog into a flow style row design.
 * Extend the API to provide functions with sort parameter based queries.

July 26th to Aug 4th - Phase 4 (Addition of attributes)
Example: One such important attribute is the inclusion of both ‘tags’ and
 * I will draft a set of attributes which in my opinion can enrich the catalog by doing screening and review of other online catalogs.
 * The proposal will the shared in the community for opinion and a list of advantages and drawbacks will be formulated.

‘category’ for extensions. A point to note is that, Semantic MediaWiki based site allow use of  categories only while WikiApiary already has a property for “Has tag”.

The adaptation here needs to be drawn.
 * Then for each accepted attribute, its dependencies will be resolved as in how much modification in source code will be required for adaptation.
 * Clear adaptation plans will be formulated for some attributes.

Aug 5th to Aug 19th - Extras

 * Documentation
 * Test suites, tutorials

Participation
This section describes on how I plan to work during the internship period.

Communication of progress

 * Email - I will keep mentor updated about the progress and also consult with the lead of Wikiapiary.com.
 * IRC Channel - I will stay on the #wikimedia-dev channel during the working hours.
 * Mailing list - [] mailing list will be used to communicate progress.
 * Blog - I will post helpful articles and updated about the project on my personal blog.

Publishing source code

 * Gerrit: Wikimedia Code Review

How and where you plan to ask for help?

 * Try Solving on my own: Go through documentation, search online, Google up etc. :)
 * Seek helps from the community: Ask questions on IRC, mailing list and mentors.
 * Seek help from outside the community: skilled friends, my teachers, etc.
 * Post on forums like Stackexchange etc.

About me

 * I am a junior at Indian Institute of Information Technology Allahabad currently pursuing Bachelor of Technology program under the department of Information Technology.
 * I have coding experience in multiple programming languages, C, C++, Java, Python, Ruby and PHP.
 * My area of interest web applications, product design and Machine Learning. I am enthusiastic about software architectures and design patterns.
 * In the web world, I have worked mostly in PHP and Ruby on Rails. I have worked with HTML, CSS and javascript also.
 * I have been driven into the open source community in the recent past and I am enjoying exploring. I have been involved with Mozilla foundation doing community building and contributing. I have been involved with the Wikimedia foundation by contributing code and also volunteering to assist remotely for Wikimania 2014.
 * I love my journey and I know there is a long way to go. Someday, I wish to be a significant contributor in the FOSS world.
 * I am a believer of Tech Activism, i.e solving the problems of society using technology.

Past experience
Open Source Contributor. Bugs I Have Worked On.
 * MediaWiki

Firefox Student Ambassador. Involved in community building and contributing.
 * Mozilla

Web Developer. Lead Developer for institute's website.
 * IIIT-Allahabad Technical Society

Product Designer for Cultural-Tech festival Effervescence.

Developed software to facilitate management of services and provide online presence to college services. ( github ).

Campus Consultant. Club lead. Involved in management and security of the institute's network along with server side administration. ( Reference )
 * IIIT-Allahabad Network Engineering Society

I am interested in working on web applications involving complex design patterns and SAAS API’s. Being involved in my college technical community, I consider myself an experienced web developer and familiar with most aspects of web development. I have also experience in automation of services and scripting. Prior to GSOC, I have worked on multiple projects to enhance my overall programming skills ( github ).