User:Aayush251/gsoc

GSoC Project Idea: MediaWiki API 2.0
Public URL: https://www.mediawiki.org/w/index.php?title=User:Aayush251/gsoc

Bugzilla report: https://bugzilla.wikimedia.org/show_bug.cgi?id=39592

Announcement: http://lists.wikimedia.org/pipermail/wikitech-l/2013-April/068926.html

Name and contact information

 * Name: Aayush Sharma
 * Email: aayushsharma251@gmail.com
 * IRC or IM networks/handle(s): aayush251 (Common)
 * Location: New Delhi, India (GMT+5:30)
 * Typical working hours: 10 AM - 6 PM (Flexible)

Synopsis
An API (Application Program Interface) is a protocol that establishes a connection between software applications. MediaWiki API keeps growing with every new feature that's added. We need to plan for future growth and development when more features will be added to MediaWiki. Not having a proper plan will only result in trouble for programmers. In this project I will be working and modifying MediaWiki API to solve the following problems:
 * Avoiding the client updating every time the API changes
 * Developers will develop extensions from the single default API (recommended).
 * Reduce the cost of making a change to MediaWiki.
 * Organize feature changes - if the client asks for version X, the API guarantees the capabilities of X and results in format X.
 * Avoid cluttering of parameters.
 * All API capabilities should return only the data requested to minimize bandwidth and improve speed.

Required deliverables
Introducing an "aliasing" system that would easily allow us to change input parameter signatures.

Changing API output (structured errors, i18n, etc.) (i18n are means of adapting computer software to different languages, regional differences and technical requirements of a target market. Internationalization is the process of designing a software application so that it can be adapted to various languages and regions without engineering changes. Localization is the process of adapting internationalized software for a specific region or language by adding locale-specific components and translating text)

Introduce good unit tests. Testing process will be iterative.

If time permits
Working on Client Libraries

Before May 27
Get to know MediaWiki core and also try to solve some bugs to become familiarized with MediaWiki.

May 27 - June 17
Community bonding period: I am already an active member at the Mediawiki IRC channel. But due to my final semester exams in this time period I will be working on getting to know the community before this time period ends.

June 17 - June 23
Studying the existing MediaWiki code/API, reading documentations and creating a final plan on how to proceed with my mentor for rest of summer.

June 24 - July 14
Will start implementing changes to MediaWiki APIs
 * Checking of Client to avoid suboptimal usage.
 * Gets the result in required format.
 * A system to check for available version of API
 * API will return required result
 * Extension API can be updated independent of core and more.

Deliverables : Fixes.

July 15 - August 4
Implementing the changes one by one after proper unit tests. This process will be done in small changes, small patches.

Deliverables : Fixes.

August 5 - August 30
Continued Unit testing to fix bugs.

Deliverables : Fixes.

September 1 - September 10
Cleaning up the code. This step involves polishing the code and continued bug testing so that changes can be merged by September 10.

Deliverables : Final Code.

September 11 - September 15
Documentation Writing. Documentation will include a walk-through of what changes were made that will help other developers in future.

Deliverables : Documents.

September 16 - September 22
Pencils down. Taking a week to polish code, improve documentation, etc.

About me
Hi, I am Aayush Sharma, undergraduate student at Maharshi Dayanand University, Rohtak, India. I am a reviewer and content writer at www.jags.in, Microsoft Student Partner for session 2013-14. I've taken seminars on HTML 5 and Windows phone development in different colleges. I have been using Wikipedia for almost 7 years now. That is why I want to contribute to Wikimedia community which is by far the best open source community I have known.

I have a good understanding of C, Java, PHP, MySQL, HTML/CSS. Working on this project will help me know how an open source community works, learn new things and have a productive summer. I plan to be part of MediaWiki even after GSoC is over. In my free time I love to code and update my website (aayush.wyvernia.net). Let’s create and innovate together.

Participation
I will prefer conversing on IRC since you get more people to give feedback and help you out. I will also be available on #mediawiki, #wikimedia-dev whenever I'm online. I will also use Wikitech-I and Wikidata-I mailing lists if I still need help. Source code will be under my Github account and blog too. I will try to solve questions/problems myself and will approach my mentor if I can't solve it or ask on IRC if he is not available.

Past open source experience
Currently working on an Upload Wizard bug Health Analyzer app for Hospitals and clinics (platform : windows) https://github.com/aayush251/healthapp