===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
1. A Wikipedia user script displaying a form for submitting a Wikipedia edit request that allows users to cite sources such as web pages, books (ISBN), journals or news articles. Throughout the process of the edit request, the user script will guide the user along the process, make requests to the backend to perform validation for any of the input fields featured in the form and will raise error messages if any of the user’s input fails validation.
2. A backend for the user script to make requests for performing validation. Some validation functions include, but are not limited to:
- Validating a URL endpoint to determine what web pages can and cannot be used as a cite. For example, a Google search result page is considered invalid as it does not contain useful information that can be used for citation;
- Checking if the quote input field is empty;
- Checking for proper formatting of a quote. The quote must be properly enclosed within quotation marks `""` or the `<blockquote>` HTML tag depending on the number of words in a quote, and;
- Scanning the web page/book/journal/news article (or parts of it) to verify the quote’s origin.
===Timeline of deliverables
| **Period** | **Task** |
| May 20 to Jun 12 | Community bonding period. Contributors are introduced to their mentors and recap on the deliverables and goals of the project. In addition, contributors are to propose the sub-deliverables of the project and come up with a timeline of targets for each week. Lastly, with the guidance from mentors, contributors are to refine their proposal to reflect the changes in the timeline and newly added tasks. |
| Jun 13 to Jun 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. |
| Jun 20 to Jun 24 | Develop the user script form using the built-in Object-Oriented User Interface (OOUI) as well as technologies such as HTML, CSS and JavaScript (jQuery). |
| Jun 27 to Jul 1 | Discuss with mentors on what is considered as a valid edit request. Use backend technology like Python to develop an API endpoint for the user script form to make requests for performing checks on the edit request. |
| Jul 4 to Jul 8 | Perform unit testing on the backend code to ensure that all validation functions work as intended. |
| Jul 11 to Jul 24 | First phase of integration testing for the backend and frontend. Perform testing to determine if the frontend can successfully communicate with the backend and ensure that the request returns the appropriate response.
| Jul 25 to Jul 29 | Write and submit **Phase 1 evaluation**. |
| Aug 1 to Aug 12 | Bug fixes for the functions in the backend and implement new validation functions, if not yet implemented. Perform testing for all backend functions. |
| Aug 15 to Aug 26 | UI improvements and bug fixes for the frontend. Test the user script for any anomalies in behavior. |
| Aug 29 to Sep 2 | Second phase of integration testing of the frontend and the backend with the newly added features and/or bug fixes. |
| Sep 5 to Sep 9 | Rectify any bugs found in the frontend or backend, perform code cleanup (e.g. writing docstrings for functions, if not present.) and writing documentation. |
| Sep 12 to Sep 19 | **Final evaluation** writeup and submission. |
| Sep 20 | **Initial announcement of GSoC 2022 results.** |
===Participation
- Utilise Zulip to communicate with the project's mentors with regards to project discussions, difficult problems and progress.
- Store the project’s source code in a newly created Github repository and push changes frequently. Code is to be reviewed by mentors every week. Should new features be implemented, newer branches will be opened, and then merged back to the master branch once the feature passes all tests.
- Write weekly reports (updated every day) during the coding period to summarize the progress, challenges faced and remedies to the challenges.
- Attend any program meeting hosted by the mentors.
===About Me
**Introduction and 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.
**How did I come across GSoC? Why GSoC and Wikimedia?**
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.