===Profile Information
**Name**: Shivansh Bindal
**IRC nickname on Freenode**: shivanshbindal9
**Github**: https://github.com/shivanshbindal9
**E-mail**: shivanshbindal603@gmail.com
**Phone Number**: +91-8295729539 / +91-8168611280
**Location**: India
**Timezone**: India(UTC+5:30)
**Typical working hours**: 10 AM - 2 AM (UTC+5.30)
**Video Chat**: https://appear.in/shivanshbindal9
===Synopsis
**DEVELOP CODE SAMPLES IN JAVASCRIPT AND PHP TO DEMONSTRATE THE USE OF MEDIAWIKI ACTION API MODULES**
- The project will involve designing and embedding a tabbed window on API pages to demonstrate the use of MediaWiki action API's.
- Writing a code generator to generate code samples denoting the use of various modules that support GET requests.
- Writing codes for all other modules that do not support simple GET requests.
- Documenting the code samples on the wiki.
- Develop a sample app around the use of MediaWiki action API.
This project will make it easier for developers around the globe to use the API's provided by MediaWiki and thus expanding the user base of MediaWiki.
**MENTORS : Srishti Sethi @srishakatux, Sarah Rodlund @srodlund**
I have been an active member of the community since December and have been contributing to other sister projects of the WikiMedia foundation. After the announcement of the GSoC project ideas, I was deeply interested in the aforementioned project and I also made a few contributions to the project. I also have been in regular contact with mentor Srishti Sethi on Zulip as well as on phabricator.
===Deliverables
The project will involve writing code in python for making an autogenerator that automatically generates code in PHP and any other language(s) for API modules that support simple GET requests. Also, it will involve writing code for various modules in various languages like Javascript and PHP. The project also includes designing and embedding the tabbed window on the API pages that will demonstrate the use of action API's and documenting various code samples on the wiki.
**PHASE 1 (Deliverable before Phase 1 evaluation)**
- Design and develop the new tabbed view using gadgets
- Autogenerator for API modules to generate code snippets in PHP
- Code for modules that do not support simple GET request in Javascript and PHP
- Wiki Documentation of several pages in the new tabbed version
**PHASE 2 (Deliverable before Phase 2 evaluation)**
- Document the remaining pages in the new tabbed version
- Work on the various tools to reduce the effort of the maintainers of the repository such as setting up the Travis, update README for code modules in PHP and Javascript and adding templates for pull requests, issues, etc.
- Submit the demo app proposed
**PHASE 3 (Deliverable before Phase 3 evaluation)**
- Complete the documentation and code for various modules in PHP and Javascript worked on as a part of other outreach programs
- (Optional) Work on another demo app
- Submit final report
=== Timeline
| **Period** | **Task** |
|------------ |-----------|
|6th May to 26th May |**Community bonding period** Work on the design of the tabbed window to be embedded, write a gadget to implement the and make/modify templates based on the design.|
|27th May to 2nd June| Write autogenerator for PHP, work with the mentor to improve the hierarchy of the project.|
|3rd June to 9th June| Write code for modules that do not support GET requests in PHP, Javascript.|
|10th June to 16th June| Document ~15 code samples on the wiki in both Javascript and PHP in the new tabbed view.
|
|17th June to 23rd June |Document next ~ 20 code samples on the wiki in both Javascript and PHP in the new tabbed view|
|24th June to 28th June|**Phase I evaluation** Submit a report of the tasks completed. Fix bugs, if any. |
|29th June to 7th July|Make changes in the project repository such as writing templates for PULL REQUEST, ISSUE TEMPLATE, setting continuous integration software tool such as Jenkins or Travis for the project. Write code for various modules, added as a part of other outreach programs, in Javascript and PHP.|
|8th July to 14th July|Document next ~ 20 code samples on the wiki in both Javascript and PHP in the new tabbed view.|
|15th July to 21st July| Work on the demo app proposed and submit 1st iteration.|
|22nd July to 26th July|**Phase II evaluation** Submit a report of work done. Fix bugs in app.|
|27th July to 4th August| Write code for various modules, added as a part of other outreach programs, in Javascript and PHP. Document ~10 code samples on the wiki.|
|5th August to 11th August|Write a tutorial for demo app made. Document remaining code samples on the wiki (if any). Fix bugs in code samples and app, if any.|
|12th August to 19th August|Work on another demo app to demonstrate the use of MediaWiki Action API's.|
|20th August to 26th August |Finish the demo app. Write code for any remaining module(s) and document it. Submit a final report of the tasks completed|
|27th August to 2nd September|**Mentor submit final evaluation of the candidate** |
|--------------|-------------------|
===Participation
I will be available anytime through Email, Zulip or if required, a well-planned video session. I have been and will be in constant contact with Srishti Sethi through Zulip. I have been an active user of Github since my freshman year. I will continue contributing via Github to our project. Apart from working on the project, I would be glad to help other contributors and users solve their issues and help the maintainers in reviewing Pull Requests.
===About Me
**Current Education(in progress):**
- **University**: Indian Institute of Technology, Roorkee, India
- **Field of study**: Computer Science and Engineering
- **Current Year of the study**: Second Year
**How did you hear about this program?**
Our college has an active community of open source developers. Every year, many of our institute’s students get selected for Open Source Programs such as GSoC and Outreachy. I heard about this program from a senior of mine who himself completed his GSoC with OWASP.
**Will you have any other time commitments, such as school work, another job, planned vacation, etc, during the duration of the program?**
I will be having my semester examinations from 24 April to 4 May so I will be slightly inactive between 10 April and 4 May to prepare for my exams, which is way before the coding period.
During my summer break (5 May to 11 July) I can easily give 50+ hours per week to the project as I have no other commitments. I will be able to do about 35-40 hours a week when my college resumes (3-4 on weekdays and 10+ on weekends). But the major part of the project will be done before my classes begin and thus I will easily able to cope up with the remaining work and deadlines.
**We advise all candidates eligible for Google Summer of Code and Outreachy to apply for both programs. Are you planning to apply to both programs and, if so, with what organization(s)?**
I am only applying for Google Summer of Code with Wikimedia organization.
**What does making this project happen mean to you?**
I was only recently introduced to the open source world and so far, I have found the developer community extremely supportive and helpful. There are a lot of open source projects that we make use of every day that makes our lives easier and help us learn new things. Wikipedia is the world's biggest digital encyclopedia and when I came to know that the project is open source, I was highly motivated to contribute to it.
Now, I have gotten a chance to contribute to the world’s biggest digital encyclopedia. I am grateful for this opportunity and assure you about my commitment and determination towards this project. Through this project, I will be able to help the developers around the globe to easily use WikiMedia's Action API's. Moreover, this project will not only give me the opportunity to work with the best developers around the world, but I'll also be able to give back something to the community and make learning easier for them.
===Past Experience
I have been a software enthusiast since my freshman year and since then I have worked on some projects which were truly a great learning experience for me. In my pursuit of acquiring web development skills, I started contributing to the open source community so that I can give my part back to the organizations whose products have been an asset to me.
Also, at my university I am an active member of [Information Management Group(IMG)](https://www.iitr.ac.in/campus_life/pages/Groups_and_Societies+IMG.html), which is solely responsible for maintaining the IIT Roorkee's intranet portal channeli and [IIT Roorkee's official website](https://www.iitr.ac.in/), and has worked on several projects from scratch, so I am well verse with the software development cycle i.e. from designing to coding to production to maintenance.
**Coding Skills:**
- Programming Languages and Frameworks:
- Fluent in HTML, CSS, Javascript, PHP, Python, C/C++.
- Sound knowledge of OOPs, MVC architecture.
- Proficient with Django(Python Framework), Django REST framework,
Django Channels, Websockets, Yii2(PHP Framework)
- Experienced with front-end frameworks such as React and Redux.
- Having moderate experience with MySQL and SQLite
- Development Environment:
- Ubuntu 18.04 LTS (preferable) or Windows 10
- Fully customized Visual Studio IDE.
- Vim(Fully customized) and Nano for small edits.
- Strong concepts of Git, can catch up with Mercurial and SVN if required.
- Other Interests:
- Shell Scripting
- Competitive Coding
Till now I have earned a great sense of understanding about the codebase. Also, I have made some pull requests mainly addressing the 2nd microtask listed on phabricator. Additionally, I have a decent knowledge of making templates and gadgets and using them.
- [#65 (merged)](https://github.com/wikimedia/MediaWiki-Action-API-Code-Samples/pull/65): expand autogenerator.js file to output Javascript files (completes **Microtask 2**).
- [#80 (merged)](https://github.com/wikimedia/MediaWiki-Action-API-Code-Samples/pull/80): make file names generic in modules.json file (solves issue #70).
- [#99 (merged)](https://github.com/wikimedia/MediaWiki-Action-API-Code-Samples/pull/99): add javascript files for remaining modules in modules.json file.
- [#114 (to be reviewed)](https://github.com/wikimedia/MediaWiki-Action-API-Code-Samples/pull/114): reorganize readme.
- [#70 (issue)](https://github.com/wikimedia/MediaWiki-Action-API-Code-Samples/issues/70) : filename attribute not generic in modules.json .
Along with working on this project I also contributed to other projects of WikiMedia Foundation enlisted in New_Developers guide of WikiMedia. The project to which I mainly contributed is WikiEduDashboard
- [#2314 (merged)](https://github.com/WikiEducationFoundation/WikiEduDashboard/pull/2314): modify javascript tests, add CSS file for single-select type and add react-select in course type selector.
- [#2321 (merged)](https://github.com/WikiEducationFoundation/WikiEduDashboard/pull/2321): improve the layout of the search bar in mobile phone screen (solves issue #2255).
- [#2331 (merged)](https://github.com/WikiEducationFoundation/WikiEduDashboard/pull/2331): add ruby spec for the added react-select component in home wiki project selector.
- [#2380 (merged)](https://github.com/WikiEducationFoundation/WikiEduDashboard/pull/2380): implement i18n in yes no selector, modify CSS and functionality of Select component in yes no selector.
- [#2410 (merged)](https://github.com/WikiEducationFoundation/WikiEduDashboard/pull/2410): solves on tab press issue in two components.
- [#2413 (merged)](https://github.com/WikiEducationFoundation/WikiEduDashboard/pull/2413): add react-select in home wiki language selector.
- [#2429 (merged)](https://github.com/WikiEducationFoundation/WikiEduDashboard/pull/2429): improve the styling of block type select alongside adding Select component.
- [#2430 (merged)](https://github.com/WikiEducationFoundation/WikiEduDashboard/pull/2430): add react-select in course level selector.
- [#2453 (merged)](https://github.com/WikiEducationFoundation/WikiEduDashboard/pull/2453): show due date only when the type is assignment (solves issue #2452).
- [#2452 (issue)](https://github.com/WikiEducationFoundation/WikiEduDashboard/issues/2452): due date visible once set irrespective of block type.
**OTHER PROJECTS:**
- **Static Site Generator**: Static Site Generator is a web-based app to facilitate the professors of our college to make single page conference website, portfolio by simple drag-drop and component selection. It uses Yii2(PHP framework) for the backend, React and Redux for the frontend, MySQL as database.
- **Water Breach Reporting APP**: This app implemented a system to report the water structure breaches to the government. It is a mobile app with backend in Django REST Framework. Blockchain, implemented in python, is also used to make transactions immutable. The source code can be found [here](https://github.com/shivanshbindal9/SIH_Reporting_App). This project was worked on as a part of Smart India Hackathon.
- **Stream**: Stream is a web app to stream music on a PC, while one can control the song using other PCs connected in a network. It is a React-Django application with webpack used as the module bundler for JavaScript code. For real-time communication between the stream and other users, WebSocket connections were deployed using Django channels.
===IMPLEMENTATION DETAILS
**Microtask 1**: As a part of Microtask we had to propose an idea for a demo app around the use of MediaWiki Action API's. After doing a bit of research and exploring various API's I came up with the idea of making a Follower's App where you can follow various users of WikiMedia and see what they are contributing to or have recently modified. The detailed proposal of the app can be found [here](https://docs.google.com/document/d/1KEWUJsjQgOV86IFMHZ4EZHv23eDYka6pILyw847Cv8w/edit?usp=sharing).
**Tabbed Window (Using Gadgets)**
Javascript can be used to implement the tabbed view in the action API pages.
Similar to the [Preferences](https://www.mediawiki.org/wiki/Special:Preferences) page, the tabbed view can be implemented in the API pages where the page is not reloaded on switching the tabs.
Design of the window will be implemented by making new template(s) or modifying the currently existing template(s).
**Details of workflow**
- The landing page will be will have URL of schema https://www.mediawiki.org/wiki/API:Upload and the tabbed window will contain the list of all MediaWiki Action API as it is shown currently, but with a different style.
{F28591617}
- Now, on switching the tab the page won't be reloaded but the content inside the box will change showing the request and response for different languages selected. The user can also browse the Github link provided to get the code.
{F28591621}
- The documentation part will not have any code snippets and the entire code for the request will be in the tabbed window.