===Profile Information
**Name:** Farhan Azmi
**Github:** github.com/farhanazmiCS
**Professional profile:** [[ https://linkedin.com/in/farhan-azmi-94b70a145 | LinkedIn ]], [[ https://drive.google.com/file/d/17IO7-Yv-Jmgp1PYEVgMYYRsioa2G1aqw/view?usp=sharing | Resume ]]
**Location:** Singapore
**Typical working hours:** 10am and 9pm (GMT+08:00 Asia/Singapore)
===Synopsis
Wikipedia is an online encyclopedia that provides non-opinionated, factual articles about a given topic. To prevent pages from being vandalized or edited to host content that is either sensitive or controversial, some pages are protected to a degree (e.g. semi-protected, extended-confirmed protection, etc.) where only seasoned users can make direct edits. For a new user to make an edit, the user would have to submit an edit request indicating the changes and then wait for feedback from a user with full edit access. Should the edit request bring valid points, the edit request would be implemented into the article page.
In the current implementation, the process for making an edit request is not friendly for new users. Firstly, new users do not understand the Wikitext markup language. Secondly, new users may be overwhelmed with the vast number of instructions thrown at them when making an edit request, possibly dissuading them from making an edit request and turning away a potential contributor.
The objective of this project is to:
1. Develop a step-by-step form with a clean, easy-to-use interface that allows users of any background to submit a Wikipedia edit request and;
2. Ensuring that the edit request complies with all Wikipedia policies by performing backend validation.
**Possible mentor(s)**
@Enterprisey, @Firefly, @SD0001
**Contacted mentors?**
Yes
===Deliverables
- A wikipedia user script that shows a form for submitting a Wikipedia edit request that allows users to cite sources such as web pages, books (ISBN), journal or news article. The form will guide the user along the edit request process, and will raise error messages if the edit request is not satisfactory. The form must be suitable for use by beginners.
- A backend for the user script to make requests for validation (e.g. URL validation) and other purposes (e.g. such as checking if the citation is in proper formatting).
===Timeline of deliverables
| **Period** | **Task** |
| May 20 to June 12 | Community bonding period. Contributors are introduced to their mentors, and are to read the project’s documentation, discuss and recap the deliverables, and come up with subtasks to do for both the frontend form and the backend API. |
| June 13 to June 17 | Mentors and contributors discuss the design of the form that allows users to input a source, and discuss how error messages are displayed for invalid edit requests. This can be in the form of a mockup tool like Figma, a paint drawing or coded with frontend technology. |
| June 20 to June 24 | Write code for developing the form using frontend technology such as HTML, CSS and JavaScript. |
| June 27 to July 1 | Discuss with mentors on what is considered as a valid edit request. Use backend technology like Python to develop an API for performing validation on the edit request. |
| July 4 to July 8 | Perform unit testing on the backend code to ensure that all validation functions work as intended. |
| July 11 to July 24 | Integration of the backend and frontend. Perform testing to determine if the frontend can successfully communicate with the backend. In addition, the requests made by the frontend to the backend must return the appropriate response.
| July 25 to July 29 | Write and submit **Phase 1 evaluation**. |
| August 1 to August 12 | Bug fixes for the functions in the backend and implement new validation functions, if not yet implemented. Perform testing for all backend functions. |
| August 15 to August 26 | UI improvements and bug fixes for the frontend. Test the user script for any anomalies in behavior. |
| August 29 to September 2 | Integrating the frontend and the backend. Test if the frontend can successfully communicate with the backend and display the appropriate data to the user. |
| September 5 to September 9 | Rectify any bugs in the frontend or backend, if any. |
| September 12 to September 19 | **Final evaluation** writeup and submission. |
| September 20 | **GSOC 2022 result released.** |
===Participation
- Communication is done primarily via Zulip.
- The project’s source code will be stored in a newly created Github repository and changes will be frequently pushed to it. Should new features be implemented, newer branches will be opened, and then merged once the feature is tried and tested.
===About Me
**Education**
I am Farhan, a self-taught developer. I have taught myself software development skills by completing online courses such as Harvard University’s CS50 Introduction to Computer Science, CS50’s Web Programming with Python and Javascript as well as MIT’s 6.001x Introduction to Computer Science with Python. Currently, I hold an Aeronautical Engineering diploma from Singapore Polytechnic and will be pursuing undergraduate studies in Software Engineering at the Singapore Institute of Technology in September. I came across GSOC via the `notes-to-cs-freshmen-from-the-future` Github [[ https://github.com/nushackers/notes-to-cs-freshmen-from-the-future | repository ]] uploaded by NUShackers whilst skimming for tips and advice on how to excel in software development. Up to the point of discovering GSOC, all of my projects are solo projects whose purpose is to develop competency for the chosen technology stack, as well as to improve my problem solving and programming skills — but none of them made an impact on others or taught me collaborative software development. With GSOC in collaboration with the Wikimedia team, I can kick start my journey in collaborative software development and open-source software whilst simultaneously creating a great impact on people, considering billions use Wikipedia as a tool for quick information retrieval.
**Commitments and availability**
In terms of availability, I will be able to fully commit to the project from May to August with no other commitments with the exception of a two-week vacation from 12 July to 25 July. I will be open to communications and will have my laptop with me during the period of vacation to discuss and contribute to the project. From September and beyond, the university term will commence with around two classes each day where I will be able to contribute to the project for around four hours each day.
===Past Experience
**Microtasks carried out**
I have completed 4 of the 5 microtasks assigned by the mentors.
[[ https://drive.google.com/file/d/1Ze4cVECju5fjgqBicmMc1KPVCjXHncF_/view?usp=sharing | Microtask 1: Making an edit request ]]
[[ https://drive.google.com/file/d/1_IHmdPhVGzVFPgR8XlBVHFYNWMLpCMT3/view?usp=sharing | Microtask 2: Design a form that allows a user to input a source ]]
[[ https://drive.google.com/file/d/1Uv5kN9KuuzNPzlSoGDs8k8WMvWu0AeGJ/view?usp=sharing | Microtask 3: Implement a form for a quote ]]
[[ https://drive.google.com/file/d/1JQynmOTnyL55ZcJRCnWI67pUr0dSvrn0/view?usp=sharing | Microtask 5: Complete the user scripts tutorial ]]
**Past projects and skills developed**
Prior to GSOC, I have developed several web-based projects using tools such as Python, JavaScript, HTML, CSS and Bootstrap by developing some personal projects. These projects include:
1. [[ https://github.com/farhanazmiCS/trip-planner | Trip Planner ]], an application using React and Django Rest Framework that allows users to plan a trip with their friends;
2. [[ https://github.com/farhanazmiCS/Network | Network ]], a twitter-like social network application created using Django and JavaScript that allows users to follow/unfollow users, create, like and comment on posts;
3. [[ https://github.com/farhanazmiCS/Mail | Mail ]], an email client developed with JavaScript that lets users send and receive email;
4. [[ https://github.com/farhanazmiCS/Commerce | Commerce ]], a Django-based web application that allows users to create and bid listings;
5. [[ https://github.com/farhanazmiCS/Wiki | Wiki ]], a Django-based web application that allows users to create, retrieve and edit wikipedia-like entries;
6. [[ https://github.com/farhanazmiCS/Death-to-Corona | Death to Corona ]], a Flask based web application that provides users with coronavirus advisories, checks for nearby vaccination centers given a postal code and lets users perform a questionnaire to assess their risk level to COVID-19.
Throughout the period of these projects, I have learnt skills such as frontend and backend web development, utilization of external APIs (using the fetch API), developing REST APIs for the client, developing application scripts, designing a responsive web interface, as well as testing and writing documentation for projects.