===1. Profile Information
**Name:** Devyansh Chawla
**IRC nickname on Freenode:** dev_monk31
**Email:** schawla333333@gmail.com
**Web Profile:** [[ https://github.com/thedevyansh | GitHub ]], [[ https://www.linkedin.com/in/devyanshchawla/ | Linkedin ]]
**Timezone:** IST (Indian Standard Time) (UTC + 05.30)
**Location (country or state):** Haryana, India
**Typical working hours (include your timezone):** 18:00 IST to 01:00 IST (5 - 5.5 hours on weekdays), 10:00 IST to 22:00 IST (10 - 10.5 hours on Saturdays and Sundays)
===2. Synopsis
User scripts are the JavaScript programs that provide Wikipedia users the ability to customize and change the behavior of their user account. It enables a user account to do various things that it otherwise couldn’t. Numerous user scripts and gadgets (promoted user scripts) are available for users to install quickly. Users can also write their own user scripts by either starting from scratch or forking an existing user script. Wikipedia’s JavaScript coverage is improved by the collaboration of editors under the name of **JavaScript WikiProject.** The WikiProject also writes user scripts and maintains user script-related pages.
Even though MediaWiki has excellent documentation on user scripts, it’s quite overwhelming. Owing to the powerful functionalities that user scripts provide, one should be able to get started with them easily and be able to leverage these powers quickly. Guided Adventure Tours areis one such medium that can enable amateur developers and users with a little bit of JavaScript knowledge to learn about them in an interactive, stimulating, and appealing way.
This project is about creating a UserScript/Gadget adventureguided tour to facilitate users to learn about user scripts and their componenhow they are created using fundamental constructs such as MediaWiki’s JS Module (ResourceLoader and its core modules), MediaWiki Action API, and OOUI (used to create interfaces usingwith object-oriented paradigm), in a consistent manner. The Guided Adventure Tour will be carried out in 4 missions:
===Possible Mentor(s)- Mission 1: Basic Introduction to writing and installing user scripts
- Mission 2: Using MediaWiki JS module for writing user scripts
- Mission 3: Using MediaWiki API for writing user scripts
- Mission 4: Using OOUI for writing user scripts
=====Possible Mentors
1. Jay Prakash - @Jayprakash12345
2. Krishna Chaitanya Velaga - @KCVelaga
3. Enterprisey - @APerson
**Have you contacted your mentors already?** Yes
===Deliverables
- Design and write the tale or story of the user script adventure tour similar to the story of The Wikipedia Adventure.3. Project Details
- Incorporate the game design or tale in our missions (mentioned above).This proposal aims at developing a Guided Adventure Tour to smoothen the learning process of user scripts. The following list defines the proposed workflow of all the Missions that will be the basis for work in the project.
**NOTE**: In the context of the tour, I’ve thought of a sample game design (named “Third from the Sun” and can be updated of course) and given the basic idea of it while describing the missions below:the workflow refers to the sequence of steps in individual mission tours.
- **Mission 1:**
1. Tell what user scripts and gadgets are.
2. Make users familiar with the significance of **common.js** file and **skin.js **file and navigate to "Special:MyPage/common.js" file.
3. Edit the common.js file.
4. Import an already existing user script from [[ https://en.wikipedia.org/wiki/Wikipedia:User_scripts/List | Wikipedia:User_scripts/List ]].
5. **Mission 1: Basic Intro:**Preview the changes.
> //“After the successful completion of this mission, the chief test pilot will come to know that their world “Terra Prime” is going to be destroyed soon.”// 6. Save the changes.
In this mission, 7. Instruct them to write another user script in User namespace (I’ll code a sample user script during the coding period which will include only basic JS/jQuery constructs).
8. the users will gain practical knowledge of what User Scripts and Gadgets are and how the existing user scripts are imported/loaded in the user accountNavigate to "Special:MyPage/skinname.js" file.
9. They will be made to implement a basic yet interesting use case of user scriptsImport the user script written in step 7 in skin.js and follow step 5 and import it in their common.js filestep 6.
10. End Mission 1.
2 (The first microtask I’ve done below guides the users to edit their Special:MyPage/common.js page in order to write user scripts.)
- **Mission 2:**
1. **Mission 2: Using MediaWiki’s JS module:**Tell about ResourceLoader and its importance while coding Gadgets.
> //“The test pilot has to make their family understand the situation and convince them to prepare for the escape before it’s too late.”// 2. Make users familiar with core JS modules i.e. **jquery** and **mediawiki** by navigating to [[ https://www.mediawiki.org/wiki/ResourceLoader/Core_modules | ResourceLoader/Core_modules ]].
In this mission, 3. Show users a well presented table containing the config values and methods that ship with mw.config.
4. Instruct them to write another user script in User namespace (I’ll code a sample user script during the coding period which will include the use of mw global object).
5. the users will gain practical knowledge of ResourceLoader,Navigate to Special:MyPage/common.js file.
why they are bound to interact with ResourceLoader as a Gadget coder,6. andImport the most useful core modules available.user script written in step 4 in common.js, With the concepts learned in MIssion 1preview changes and Mission 2,save.
they will be made to write a user script using core modules,7. especially the MediaWiki (**mw**) moduleEnd Mission 2.
3- **Mission 3:**
1. **Mission 3: UsingTell about the MediaWiki API:**ction API.
> //“He has to convince the guards on his way to the spaceship that his family and friends are coming along to see him take off.”// 2. Make them explore the demo apps on [[ https://apps-gallery.toolforge.org/ | Toolforge ]] to get a glimpse of a wide range of API use cases.
In this mission, 3. Brief about the API endpoints, parameters, query strings etc. in a well presented manner.
4. Navigate to [[ https://www.mediawiki.org/wiki/Special:ApiSandbox | API Sandbox ]] and tell them about its relevant functionalities to send API requests to Wikimedia servers.
5. Similar to the idea of the third microtask I’ve done below, give users the choice of selecting the type of request they want to send (like showing recently added articles, showing Wikipedia articles near to the user's location etc.).
6. Instruct them to write another user script in User namespace (I’ll code a sample user script during the coding period which will include the use of API).
7. the users will gain practical knowledge of MediaWiki API,Navigate to Special:MyPage/common.js file.
8. how to test and send requests to APIImport the user script written in the API Sandbox.step 6 in common.js, They will be made to write a user script that does something interesting using the API (for instance,preview changes and save.
9. generating verification tokens for all the family members that’ll authenticate them to enter the spaceship :P)End Mission 3.
- **Mission 4:**
1. Tell about OOUI and how useful and flexible it is while dealing with DOM elements and data flows separately.
2. Navigate to [[ https://doc.wikimedia.org/oojs-ui/master/demos/?page=widgets&theme=wikimediaui&direction=ltr&platform=desktop | OOUI Demos ]] so that users can get intuition of OOUI widgets and widget customizations.
3. Show the various modules required as dependencies for interacting with OOUI features in a well presented manner.
4. **Mission 4: Using OOUI:**Instruct them to write another user script in User namespace (I’ll code a sample user script during the coding period which will include the use of OOUI).
> //“Ultimate Showdown: The test pilot should find a secret passcode that will enable them to escape the atmosphere of Terra Prime and head towards Earth, 5. the third planet from the Sun.”//Navigate to Special:MyPage/common.js file.
In this final mission, 6. Import the user script written in step 4 in common.js, preview changes and save.
7. Optional: Show them how they can promote their user scripts to Gadgets.
8. End Mission 4.
===4. Deliverables
- Design the story or theme of the user script adventure tour similar to the story of The Wikipedia Adventure.
- Incorporate the theme in all the missions and write the sample user scripts relevant to each mission.
1. **MISSION 1: BASIC INTRO-** In this mission, the users will gain practical knowledge of what User Scripts and Gadgets are and how the existing user scripts are imported/loaded in the user account. They will be made to implement a basic yet interesting use case of user scripts and import it in their common.js or skin.js file.
2. **MISSION 2: USING MEDIAWIKI JS MODULE-** In this mission, the users will gain practical knowledge of ResourceLoader, why they are bound to interact with ResourceLoader as a Gadget coder, and the most useful core modules available. With the concepts learned in MIssion 1 and Mission 2, they will be made to write a user script using core modules, especially the MediaWiki (**mw**) module.
3. **MISSION 3: USING MEDIAWIKI API-** In this mission, the users will gain practical knowledge of MediaWiki API, how to test and send requests to API in the API Sandbox. the users will gain practical knowledge of OOUI andThey will be made to write a user script using it in the context of our game design (wireframe ofthat does something interesting using the OOUI interface,API.
4. I’m thinking of**MISSION 4: USING OOUI-** In the final mission, is shown below):the users will gain practical knowledge of OOUI and will be made to write a user script using OOUI in the context of our game design.
The wireframe of the landing interface of the Guided Adventure Tour I’m thinking of is shown below:
{F34366241}
- Perform unit testing using QUnit for the JavaScript code and always run the tests before committing the changes to GitHub.
- Code optimization.
- Write the documentation on how theof the UserScript/Gadget Guided Adventure Tour is developed on MediaWiki.
- Provide continued support and maintain the project after the Program ends.
===5. Timeline
**Community Bonding Period: (May 17 - June 7)**
===Timeline| Task |
| -----
| **(1)** Know about Wikimedia's community, discuss the deadlines and milestones with mentors. **(2)** Study ResourceLoader, APIs, and OOUI in detail, understand the intricacies involved in Guided Tours, analyze The Wikipedia Adventure Tour and think about ways of integrating all missions. **(3)** Research the game designs or themes. Set up the testing environment for QUnit.
**Coding period:**
| Period | Task
| ----- | -----
| May 17, 2021 - June 7, 2021 | **Community Bonding Period:** Know about Wikimedia's community, discuss the deadlines and milestones with mentors. Study ResourceLoader, APIs, and OOUI in detail, understand the intricacies involved in Guided Tours, analyze The Wikipedia Adventure Tour and think about ways of integrating all missions. Research the game designs or refurbish the proposed story.
| June 7, 2021 - June 14, 2021 | Design the landing interface of the UserScript/Gadget Tour, plan the workflow of Mission 1, and write its code (implementation).
| June 15, 2021 - June 21, 2021 | Unit test Mission 1, bug fixes, write its narrative/story on MediaWiki. Write the bi-weekly report. **[1]**
| June 22, 2021 - June 28, 2021 | Plan the workflow of Mission 2 and write its code (implementation) in a manner consistent with Mission 1.
| June 29, 2021 - July 5, 2021 | Unit test Mission 2, bug fixes, write its narrative/story on MediaWiki. Write the bi-weekly report. **[1]**
| July 6, 2021 - July 12, 2021 | Plan the workflow of Mission 3 and write its code (implementation) in a manner consistent with previous Missions.
| July 12, 2021 - July 16, 2021 | **Evaluations:** Prepare for the evaluations and overcome the delays in the plan executed so far, if any.
| July 17, 2021 - July 24, 2021 | Unit test Mission 3, bug fixes, write its story narrative/story on MediaWiki. Write the bi-weekly report. **[1]**
| July 25, 2021 - July 31June 8 - June 13 | Design and code the landing interface of the Userscript/Gadget Tour.
| June 14 - June 19 | Plan the workflow of the first mission, 2021 | Plan the workflow of Mission 4 and write its code (implementation) in a manner consistent with previous Missions.
| August 1write introductory user script samples, 2021 - August 7, 2021and code Mission 1.
| June 20 - June 24 | Unit test Mission 41, bug fixes, write its narrative/story on MediaWiki. Write the bi-weekly report. **[1]**
| August 8, 2021 - August 16, 2021 | Write documentation on MediaWiki with the guidance of mentors, and overall testing of the project.
| August 16, 2021 - August 23
| June 25 - June 30 | Plan the workflow of the second mission, 2021 | **Code Submission and Final Evaluations:** Submitwrite user script samples that use the code and project summaries.MediaWiki JS module, Fix unforeseen bugs and work on community feedbackand code Mission 2 in a manner consistent with Mission 1.
| August 24July 1 - July 5 | Unit test Mission 2, bug fixes, write its narrative/story on MediaWiki. Write the bi-weekly report. **[1]**
| July 6 - July 11 | Plan the workflow of the third mission, write user script samples that use the MediaWiki API, and code Mission 3 in a manner consistent with previous Missions.
| July 12 - July 16 | **Evaluations:** Prepare for the evaluations and overcome the delays in the plan executed so far, if any.
| July 17 - July 22 | Unit test Mission 3, bug fixes, write its narrative/story on MediaWiki. Write the bi-weekly report. **[1]**
| July 23 - July 29 | Plan the workflow of the fourth mission, write user script samples that use OOUI, 2021and code Mission 4 in a manner consistent with previous Missions.
| July 30 - August 30st 4 | Unit test Mission 4, 2021 | Share my experience and learnings gained from the project on Medium and update MediaWiki user page to accommodate the same.
**[1]** Since I'd try to get my code reviewed for each Mission regularly,bug fixes, write its narrative/story on MediaWiki. I hope to execuWrite the tasks of these weeks soonbi-weekly report. This can give me room for unplanned changes.**[1]**
| August 5 - August 11 | Write the project’s documentation on MediaWiki with the guidance of mentors, As such,and overall testing of the project.
| August 12 - August 16 | **[2]**
| August 16 - August 23 | **Code Submission and Final Evaluations:** Submit the code and project summaries. the last week can be used as a buffer for unexpected spillages and delaysFix unforeseen bugs and work on community feedback.
| August 24 - August 30 | Share my experience and learnings gained from the project on Medium and update the MediaWiki user page to accommodate the same.
===**[1]** Since I'd try to get my code reviewed for each Mission regularly, I hope to execute the tasks of these weeks soon. This can give me room for unplanned changes. As such, the period **[2]** can be used as a buffer for unexpected spillages and delays. If everything goes as per the plan, I’ll utilize the period **[2]** to improve the overall Adventure tour and optimize the codebase.
===6. Participation
- I’ll be creating a repository on GitHub with a master and a development branch. The code will be pushed to the development branch periodically and merged with the master branch after reviewing and testing. The bugs and subtasks will be managed on Phabricator.
- I’ll be using the MediaWiki-Docker environment for the development and testing of the Userscript/Gadget guided adventure tour.
- I’ll write bi-weekly reports, predominantly in the User namespace, and update them on my MediaWiki user page. To make general project-related work and information more accessible, I will occasionally write Medium articles.
- I’ll consult with my mentors via Freenode(matrix.org), in the Phabricator task, and/or in Zulip as per the requirements, in case I’ve queries regarding the implementation/workflow/architecture of guided tours, extensions, etc. I’ll be active on the `#mediawiki` IRC channel to ask general doubts related to MediaWiki.
- I’m reachable from 10:00 IST to 01:00 IST and can be pinged or DMed during working hours via any of the above platforms including [[mailto:schawla333333@gmail.com | email]]
===7. About Me
> **//Your education (completed or in progress)://**
I’m a sophomore at National InURLstitute of Technology Kurukshetra, Haryana, India pursuing Bachelor of Technology in Information Technology. I've completed my secondary education from R.S. Public Sr. Sec. School, Karnal, Haryana, India.
> **//How did you hear about this program?//**
I heard about Google Summer of Code in my freshman year during a workshop that was being organized in our Institute. The students talked about their experiences of applying to the program, getting selected, and contributing to an open-source organization for the use and benefit of all. The very idea of working on a real-world project in a sought-after organization and at the same time getting the opportunity to learn and grow as a developer fascinated me.
> **//Will you have any other time commitments, such as school work, another job, planned vacation, etc, during the duration of the program?//**
My end-semester exams would be conducted between May 11 and June 11. Since the Community Bonding Period lies in this period, I’ll plan my schedule accordingly to keep up with the events such as getting familiar with the community, discussing strategies with my mentors to consolidate the timeline and milestones of the project.
But I’ll focus on GSoC for more than the typical working hours mentioned above from June 11 to July 26. From July 26 onwards (that’s when my third year of college commences), I’ll continue as per the specified typical working hours. Rest assured, I'll be in touch with my mentors and inform them of my progress regularly.
> **//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 applying only for Google Summer of Code.
> **//How much time would you be able to commit to the Program?//**
During the Coding Period (July 7 - August 16), I'd be able to commit 30-35 hours per week.
> **//What does making this project happen mean to you?//**
The vision of the Wikimedia Foundation to empower everybody with the sum of available knowledge, that fully represents human diversity, urges me to contribute to this organization. I’m inspired by the contributions of the volunteers who help sustain the goal of providing free knowledge to all. By working on this project, I’d like to reinforce its mission and be an aid to streamline the learning process of user scripts, which are one of the core elements in Wikimedia projects.
Another reason that inspires me to take up this project is its ability to help users with little or no user JavaScript background to customize their user account in less time, and read the user script documentation only when required. This will surely improve the User Experience and usability of MediaWiki.
Implementing this project would help me apply my skills practically and get to learn new things by interacting with some of the best developers around.
===8. Past Experience
- I’ve worked on various JavaScript projects which have helped me gain proficiency and intuition in the internal structure and details of how things work together in JavaScript and frameworks. I undertook the role of frontend developer as a freelancer where I revamped the entire user interface of the website ReadingRoots ([[ https://readingroots.in | Visit ReadingRoots ]]) - a platform to manage and share books. I gained good exposure to UI/UX and user-driven outcomes.
- I contributed to the UI and website navigation of a COVID-19 Dashboard. This helped me become familiar with core JavaScript concepts and React.js ([[ https://github.com/gawdsnitkkr/covid_kanvas | GitHub ]] **|** [[ http://gawds.in/covid_kanvas | Visit website ]]).
- In e-Yantra Robotics Competition 2021 ([[https://portal.e-yantra.org/ | eYRC]]), our team designed a Ball Balancing Platform along with an Inspector Bot simulation to ascertain its quality. My contribution to all tasks of the competition was quite significant. At every stage, our team was in the Top 30 teams out of the 600+ teams that participated from all over India. This massive project-based learning event not only taught me how to manage time effectively but also techniques to collaborate remotely and get work done.
- I was a part of a team that developed a prototype of the Traffic Management and Accident Detection system using OpenCV as part of the Technical Fest of my Institute where we finished in second place ([[ https://github.com/Hardik-hi/Team-Novus-Productathon | GitHub ]]).
- Our University team (named Kurukshetra Warlords) has been recently selected as regional finalists from the region - Central Asia + Southern Asia, of OpenCV AI Competition 2021 ([[ https://opencv.org/opencv-ai-competition-2021/ | OpenCV AI Competition ]]), sponsored by Microsoft Azure and Intel, in which we are implementing our proposed idea using OpenCV AI Kit with Depth (OAK-D). We are in the top 250 teams that have been selected out of 1400+ teams that applied from all over the world.
- I contributed to the Alumni website of GAWDS (Graphics and Web Development Squad, NIT Kurukshetra) which updates the DOM using API whenever a user (in this case, GAWDS alumnus) fills his/her respective entry using google form.
- I am proficient in C/C++, Python, HTML, CSS, Bootstrap, JavaScript, jQuery, React.js, and Node.js, Git, Linux, and basic PHP (which I've taught myself during the period between Mentor Orgs announcement and Student Application Period, for gaining a sort of intuition in MediaWiki installation).
===9. Microtasks Carried Out
- **MICROTASK 1: Create a mini-tour using any two steps**
- This mini-tour guides the user to edit their Special:MyPage/common.js page in order to write user scripts.
- Link: [[ https://www.mediawiki.org/wiki/User:Novusistic/createUserScript.js | User:Novusistic/createUserScript.js ]]
- **MICROTASK 2: Create a basic user script that uses OOUI in JavaScript**
- This user script enables users to play a “Guess the random number” game using OOUI Popup widget as a custom widget.
- Link: [[ https://www.mediawiki.org/wiki/User:Novusistic/customWidgetInOOUI.js | User:Novusistic/customWidgetInOOUI.js ]]
- **MICROTASK 3: Create a basic JavaScript program that makes an interesting query using the MediaWiki API**
- This user script enables the user to interact with the MediaWiki API using the interface created with Custom Widget in OOUI. It creates the following API queries using separate buttons: (i) Shows the recently added Wikipedia articles in a specified category (category specified in the input field) and (ii) Shows the Wikipedia articles near the specified location.
- Link: [[ https://www.mediawiki.org/wiki/User:Novusistic/API-Demo-using-OOUI.js | User:Novusistic/API-Demo-using-OOUI.js]]
- **NOTE:** I have also created the following webpage which contains the details for executing the code and the corresponding output of the microtasks.
- Link: [[ https://thedevyansh.github.io/wikimedia-microtasks/ | Wikimedia Microtasks ]]