===Profile Information
Name: Aditya Jain
IRC nickname on Freenode: AdityaJ
Gmail ID: adi2007jain@gmail.com
GitHub profile: https://github.com/Jain-Aditya
Location: India
Typical working hours: Between 11 am and 6 pm UTC +5:30 (Will give more time if required)
===Synopsis
> Short summary describing your project and how it will benefit Wikimedia projects
There are many volunteers around the world who contribute to Wikimedia projects. This project is about developing a tool that gives a sneek peek into a developer’s contributions on Wikimedia platforms: Gerrit and Phabricator. There is already a tool called AWMD stats tool that generates monthly statistics of technical contributors to Wikimedia projects from Africa. Our project will seek inspiration from this tool but it will not only be limited to African Wikimedia community, instead it will generate statistics of all the Wikimedians around the globe.
> Possible Mentor(s)
@srishakatux, @D3r1ck01, @Tuxology, @samuelguebo
> Have you contacted your mentors already?
Yes
===Deliverables
After the completion of internship, a new tool will be available which can provide statistics of developers’ contributions for the specified time window. This new tool will have the following workflow:
- There will be an option to upload a csv file which will have gerrit/github/phabricator user names. Along with this, the time frame can be chosen for which we want to see the statistics.
- After uploading the csv and choosing time frame, an API will be invoked which will parse the csv to extract usernames and then query gerrit/phabricator API to get appropriate statistics. More details about the backend part is provided in the “Detailed Implementation” section.
- Render list and graphical view which will represent statistics of developer’s contributions and phabricator activities (fetched from their respective APIs) along with the ability to sort the data.
- Each user will have a hyperlink which will lead to a detailed statistics view of that user (this includes displaying the past few patches along with their statuses).
- The user of the tool will be able to export data in CSV or any other relevant formats.
I will be using Python and Flask framework for building this tool. For the initial phase, we will be collecting developer contributions from gerrit API only.
If time permits, I will work on the following things:
# Explore the integration with github API.
# Explore other formats for uploading data like excel and providing text field for entering comma separated values.
===Detailed Implementation
For rendering charts, I am planning to use a javascript library (probably chart JS). I will be exploring both of them in the community bonding period. I’ll go with the one which is more active in terms of development and is well documented.
Format of CSV which needs to be uploaded:
| **Name** | **Gerrit username** | ** Phabricator username** | **Github username** |
|------------ |-----------|------------|-------------|
| Aditya Jain | AdityaJ | AdityaJ | Jain-Aditya |
| Sam Walton | Samwalton9 | Samwalton9 | Samwalton9 |
| Srishti Sethi | srishakatux | srishakatux | srishti |
Components to be built in the backend:
# **CSV parser:** I will be using ‘csv’ library in Python to read the csv file and collect gerrit and phabricator usernames.
# **Collecting developer statistics:** This component will take the list of usernames and time window. The script will call https://gerrit.wikimedia.org/r/changes/ API as done in the microtask 1 and will return number of patches merged on gerrit. The result will be sorted in decreasing order of number of merged patches.
# **Collecting phabricator statistics:** This file will take the list of usernames and time window. It will internally call Conduit APIs to generate statistics. This will be something similar to what we did in microtask 2.
The API which will be invoked from UI (after uploading CSV) will make use of the above three components and return the data in appropriate JSON format which can then be used by the javascript library to render charts and tables. To develop the web page, I will be using HTML along with Bootstrap for styling purpose.
**Exporting statistics data: **
This will be implemented completely on javascript side given that the entire data will be available when the user is visualizing graphs.
**Individual user statistics page: **
An API will be created which takes in gerrit and phabricator id and returns the detailed statistics which will be rendered on UI.
===Timelines
>May 7 - May 14
- Community bonding period
- Explore javascript libraries and finalize which one to use
- Study already existing AWMD tool
>May 15 - May 22
- Initial project setup (using flask framework)
- Refining the proposed Mockups and finalize the design.
- Setup environment on Toolforge
>May 23 - June 7
- Start working on the UI - Build a homepage which provides option to upload CSV file and option to choose date range by providing calendar.
>June 8 - June 22
- Build component to read CSV file
- Build component to fetch gerrit data
- Build component to fetch phabricator data
>June 23 - July 7
- Build the API which will be used by UI home page (This will make use of all three backend components)
- Integrate homepage with the API and render appropriate charts/tables
- Gather feedback from the users by announcing the features on mailing lists
>July 8 - July 15
- Implement the detailed user statistics page (This includes creating the API for getting statistics for a particular user and building the UI).
>July 16 - July 30
- Build feature for exporting the results as CSV
>August 1 - August 26
- Documentation and bug fixes
- Move the github repository to gerrit
- I will also utilize this time to implement any additional features (which are feasible within the given time) and filing them which are suggested by the users as the feedback.
===Participation
- For sharing status and discussing ideas, I will be using phabricator. I will be active on Zulip and gmail during my working hours.
- I will be writing blog for sharing my experience and progress on this project. I plan to do it after every evaluation.
==About Me
> Your education
I am a third year Computer Science undergraduate student at Bundelkhand Institute of Engineering and Technology, Jhansi (India).
> How did you hear about this program?
I heard about this program in a campus session regarding open source development.
> 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 completely free till mid-July. After that my college will start but I will still be able to give 7-8 hours on weekends and 3-4 hours on weekdays as there wouldn’t be any exams during that period.
> 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 am passionate about problem solving and software development. I have been using Wikipedia since childhood and it always helped me in understanding complex things and has proven to be the best resources among others available on the Internet. What wikipedia today is just because of its community. Building this tool will definitely help Wikimedia community to grow more and this feeling motivates me more towards its development. Also, till now I haven’t worked on any project that would impact millions of people. This project gives me that opportunity and, at the same time, challenges me to learn and grow.
===Past Experience
I have been learning Software Development and Algorithms since my freshman year and I am enjoying it so far. I have mostly worked on Python, Django, Flask, MySQL, Postgres, Javascript, Heroku.
Following are some of my personal projects:
- **Discussion-Forum:** A django application that uses MySQL database. It allows admin to create categories for which user may start any discussion. Also other users can post comments on that discussion. The link to the repo is: https://github.com/Jain-Aditya/DiscussionForum
- **Book-Review app:** A flask application that allows logged-in users to search for books by their author name or by ISBN number. I have used Postgres database for this application which is hosted on Heroku. This application fetches the book ratings and reviews from the API provided by goodreads. The link to the repo is: https://github.com/Jain-Aditya/Book-Review
===Contributions to Wikimedia
I have been exploring Wikimedia projects since January 2018. So far I have explored and fixed some bugs of Pywikibot, Worklist tool, Library-Card-Platform and Hashtags.
- **(Merged)** T215034: Strip timezone information from CSV download.
https://github.com/Samwalton9/hashtags/pull/5
- **(Merged)** T207367: Add a message if user attempts an unsupported search.
https://github.com/Samwalton9/hashtags/pull/6
- **(Merged)** T216727: Display a notice if database appears to be significantly behind current time.
https://github.com/Samwalton9/hashtags/pull/9
- **(Merged)** Hashtags: Add default to EXCLUDED.
https://github.com/Samwalton9/hashtags/pull/7
- **(Merged)** T188737: In the list of "templates used on this page" when editing, highlight redirect templates by italicising them (like we do elsewhere).
https://gerrit.wikimedia.org/r/#/c/mediawiki/core/+/416220/
- **(Merged)** T215246: Gracefully handle server errors on /applications/apply/<random_number>
https://github.com/WikipediaLibrary/TWLight/pull/241
- **(Merged)** T215782: Server error when updating an Invalid application to another status
https://github.com/WikipediaLibrary/TWLight/pull/243
- **(Merged)** T184115: Pywikibot: Add missing doc string params.
https://gerrit.wikimedia.org/r/#/c/pywikibot/core/+/481332/
- **(Merged)** Pywikibot: Basestring is a description of parameter value's type.
https://gerrit.wikimedia.org/r/#/c/pywikibot/core/+/481322/
- **(Merged)** Worklist tool: Can't create worklist from PetScan query ("PetScan articles could not be saved").
https://github.com/MeghaSharma21/WorklistTool-GSoC-2018/pull/47
- **(Merged)** Worklist tool: Added import statement "from django.conf.urls import url, include" in app/urls.py
https://github.com/MeghaSharma21/WorklistTool-GSoC-2018/pull/45
- **(Merged)** Worklist tool: Added a constant
https://github.com/MeghaSharma21/WorklistTool-GSoC-2018/pull/44
- **(Under Review)** T216398: Allow AND/OR searching for multiple hashtags.
https://github.com/Samwalton9/hashtags/pull/25
- **(Under Review)** T206125: Consider re-addition of Google Drive integration.
https://github.com/Samwalton9/hashtags/pull/28
===Microtasks Completed
# Microtask 1: https://github.com/Jain-Aditya/GSoC-Microtask-1
# Microtask 2: https://github.com/Jain-Aditya/GSoC-Microtask-2
# Microtask 3: Mockups will be added soon.
> Add any other relevant information such as UI mockups, references to related projects, a link to your proof of concept code, etc