===Profile Information
**Name :** Nikhil Prakash
**IRC nickname on Freenode :** nix07
**Email :** nikhil07prakash@gmail.com
**Web Profile :** https://www.linkedin.com/in/nikhil07prakash/
**Location :** Bengaluru, India
**Typical working hours :** 11 am to 9 pm UTC +5:30 (can extend it, if required)
**On college days:** 3pm to 10pm UTC +5:30 (can extend it, if required)
===Synopsis
> Short summary describing your project and how it will benefit Wikimedia projects
Wikimedia movement organizes many events for developers, especially newbies, to get them introduced to open source development. But organizing such events just give them a starting. It requires much greater effort from the community to make sure that these attendees continue their journey of open source development. Therefore, there is a need to have a tool that can track candidates' activities/contributions on Gerrit, Phabricator and GitHub and help event organizers in retaining the candidates. Currently, Wikimedia uses [Bitergia's analytics](https://wikimedia.biterg.io/) tool to get useful information, but it is cumbersome and requires too many steps to obtain the statistics. Therefore, with this project, we aim to build a tool which will generate useful statistics about a developer in the easiest fashion. The tool will be hosted on [Toolforge](https://tools.wmflabs.org/) to make it more accessible.
> Possible Mentor(s)
@srishakatux @D3r1ck01 @Tuxology @samuelguebo
> Have you contacted your mentors already?
Yes
===Deliverables
> Describe the timeline of your work with deadlines and milestones, broken down week by week. Make sure to include time you are planning to allocate for investigation, coding, deploying, testing and documentation
After the completion of this program, we will have a tool with the following features:
* An option to upload a CSV or Excel file containing the list of usernames.
* A field to enter the username directly, which would be really handy if someone wants to check the stats of a single/particular candidate.
* A field to input the timeframe, i.e, start date and end date.
* Fetch the contribution data from Gerrit, Phabricator and GitHub within the specified timeframe for all the entered users.
* Display the fetched information in list as well as graphical format (e.g. bar chart, pie chart, etc) with the option to sort the data by various parameters like merged patches, commits, assigned tasks, etc. Also, display the individual contributions of each developer, similar to AWMD stats tool.
* Host on Toolforge to make it accessible for everyone.
* Download the generated statistics either in a list or graphical format.
* Generate shareable links for each graphical view to achieve easy sharing of generated statistics.
Complete documentation or manual for this tool.
If time permits, the following features/tasks will be added:
* Research to understand the potential users' utility of this tool.
=Timeline=
| **Period** | **Task** |
|------------ |-----------|
|May 7 to May 26|**Community bonding period**. Investigate the complete requirements of the tool, by gathering feedback from potential users. Refine the UX and design mockups for the web app accordingly. Study similar existing tools, especially AWMD stats tool and Bitergia's analytics tool in detail. Get comfortable with Gerrit environment.|
|May 27 to June 2| Implement the complete responsive UI of the web app, except the charts.|
|June 3 to June 9| Choose a suitable JavaScript library for rendering charts. Implement the same and improvise the UI if needed.|
|June 10 to June 16| Implement the functionality of uploading CSV and Excel data. I plan to use [File API](https://developer.mozilla.org/en-US/docs/Web/API/File/Using_files_from_web_applications) to read the contents of the uploaded file, but will investigate other methods to select the most efficient one.|
|June 17 to June 23| Implement the functionality of fetching the contribution data from Gerrit, Phabricator and GitHub (needs investigation) using the corresponding APIs, given the username, in Python. |
|June 24 to June 30|**Phase I evaluation**. Test and fix bugs.|
|July 1 to July 7| Read Toolforge's documentation to learn about hosting a tool on Toolforge.|
|July 8 to July 14| Implement the back-end logic of the web app in Python, while incorporating the functionality of fetching the contribution data.|
|July 15 to July 21| Integrate both the front-end and back-end of the web app, i.e, implement the complete web app.|
|July 22 to July 28| **Phase II evaluation**. Deploy the web app on Toolforge.|
|July 29 to August 4| Test the complete web app. Fix bugs and errors. Improve the performance of the web app using Google [PageSpeed Insights](https://developers.google.com/speed/pagespeed/insights/) tool.|
|5 August to August 11| Implement additional functionalities like generating shareable links to graphical views (which can be used to share the statistics), downloading the generated statistics to the local system and any other functionalities requested by the users.|
|August 12 to August 25| Gather feedback from the potential users by announcing the tool on mailing lists and other channels, fix bugs, improve functionalities and write documentation or appropriate guides.|
|August 26 to September 2|Mentors submit final student evaluations.|
|September 3|**Final results of Google Summer of Code 2019 announced**|
|--------------|-------------------|
//Since this project will be the first version of the tool, I'll take utmost care about the extensibility and scalability of the tool, during the development process. Therefore, I'm planning to use a minimum number of third-party libraries, to reduce dependency, for this project. Mentors' help would be highly valuable especially in this aspect.//
===Participation
> Describe how you plan to communicate progress and ask for help, where you plan to publish your source code, etc
* I'll be coding the tool from scratch and will be using Gerrit for development (as per the discussion with @Tuxology). But I'm open to other options.
* I'll be using Phabricator for managing bugs and subtasks. Will also use it to discuss the status and ideas related to the project.
* I'll be active on IRC and Zulip during my working hours.
* I'll be writing blogs related to the project to discuss the overall progress, experience, and learning during the internship. I plan to use [medium](https://medium.com/@nikhil07prakash/) for the same.
===About Me
Tell us about a few:
> Your education (completed or in progress)
I'm a third-year undergraduate student, pursuing Bachelor of Engineering at [R V College of Engineering, Bengaluru, India](https://rvce.edu.in). I'll be graduating in May 2020.
> How did you hear about this program?
I got to know about GSoC last year from my college seniors.
> Will you have any other time commitments, such as school work, another job, planned vacation, etc, during the duration of the program?
I'll have a summer break from 25th May to 4th August. During this period, I won't have any other commitments. But from 5th August, I'll have college works which will take at most 3-4 hours a day and an average of 20 hours a week. Further, I'll have semester exams from 10th May to 24th May, during which I won't be very active. I would be able to give around 8-12 hours a week during this 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'm applying only for the GSoC with Wikimedia organization.
> What does making this project happen mean to you?
During my last summer research internship, I was working on an open problem related to Wikipedia. I had to analyze a very large number of English Wikipedia articles. And during this time, I realized the importance of APIs and tools like AWMD stats tool, as initially, I had to struggle a lot to find the appropriate tools. Further, this tool will help the Wikimedia event organizers retain new candidates to open source development, which motivates me and give a sense that my work will impact thousands of people. Therefore, with this project, I aim to make the life of those people simpler.
===Past Experience
> Describe any relevant projects that you've worked on previously and what knowledge you gained from working on them. Describe any open source projects you have contributed to as a user and contributor (include links). If you have already written a feature or bugfix for a Wikimedia technology such as MediaWiki, link to it here; we will give strong preference to candidates who have done so
My journey to application development started in the freshman year with a MOOC by [Hasura](https://hasura.io/) in partnership with [IIT Madras](https://www.iitm.ac.in/). It was Asia's largest MOOC back then when I took it in September 2016. Being one of the course toppers, I was offered an 8-week product development internship at [Hasura](https://hasura.io/). As part of the internship, I developed a Food Delivery Web Application. The corresponding repository can be found [here](https://github.com/Nix07/restaurant-hasura). Unfortunately, the app is not live now, but [this video](https://www.youtube.com/watch?v=vZXutOoqbM4) describes all the functionalities. Further, I had written blog posts for each week (starting from wireframes to testing) of the internship which can be found [here](https://medium.com/@nikhil07prakash/).
Since then, I have worked and learned quite a few web technologies including HTML, CSS, JavaScript, jQuery, AngularJS, PHP, Python, NodeJS. Among databases, I'm comfortable with MySQL and familiar with MongoDB. I'm a Linux (mostly Ubuntu) user since my school days.
[searchGitHub](https://github.com/Nix07/searchGithub) is a NodeJS application used to fetch information about a GitHub user, i.e Location, Email, Member Since, Repositories, etc, using the GitHub API. AngularJS and Bootstrap have been used for the front-end. The best part of this application is, it displays the results in real time, i.e, as soon as user type the username (used AngularJS binding functionality).
=== Open Source Contributions
I started exploring Wikimedia projects in March 2019. Due to time constraints, I couldn't contribute much to it.
- **(Merged)** T217195: Add script misspelling support to pwb.py
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/495457
- **(Working)** T175451: Add script autocompletion support to pwb.py //Currently, working on this task.//
Apart from Wikimedia, I have contributed to some other open source projects like [Oppia](https://github.com/oppia/oppia), [babel-plugin-remove-test-ids](https://github.com/kutyel/babel-plugin-remove-test-ids).
- **(Merged)** Fix of #1542: RTE Components correctly displayed in answer group header https://github.com/oppia/oppia/pull/4565
- **(Merged)** Fix of #2533: Modified the stripFormatting filter to preserve newlines in RTE cut-and-paste https://github.com/oppia/oppia/pull/4568
- **(Merged)** Fix part of #3826: Extract focusService and BackgroundMaskService into individual files https://github.com/oppia/oppia/pull/3941
- **(Merged)** Fix part of #3712 : Created Continue Button Directive https://github.com/oppia/oppia/pull/4273
- **(Merged)** Fix of #4253: Stopped weird flickering in the card https://github.com/oppia/oppia/pull/4284
- **(Merged)** Fix #4102: Auto Hide of Navbar https://github.com/oppia/oppia/pull/4108
- **(Merged)** Fix part of #3954: Created a Page Object for Thanks Page https://github.com/oppia/oppia/pull/4085
- **(Merged)** Improved README with link to slides https://github.com/kutyel/babel-plugin-remove-test-ids/pull/4
- **(Merged)** Fix #2816:Add call to action buttons to the Foundation page https://github.com/oppia/oppia/pull/2903
===Any Other Info
> Add any other relevant information such as UI mockups, references to related projects, a link to your proof of concept code, etc
==Microtasks Completed==
- //Write a program in Python to fetch for a user number of patches merged within a specific timeframe on Gerrit.//
-- The corresponding Python code can be found [here](https://github.com/Nix07/Microtask). It takes username, starting and ending date of the timeframe as inputs and returns the number of patches merged by this user during the timeframe.
- //Write a program to fetch all tasks a given user is subscribed to in Phabricator (Maniphest). Prepare a list of all such tasks for a given Month of an year and summarize the findings by creating a "tasks subscribed to vs time" table or histogram.//
-- The corresponding Python code can be found [here](https://github.com/Nix07/TaskStatistics). [Conduit API](https://phabricator.wikimedia.org/conduit/) has been used to fetch data from Phabricator. It takes Conduit API token, username, month and year as inputs and returns the week wise tasks subscribed table.
- //For this particular microtask, create a preliminary mockup for the first few screens (2-3) of this application/tool while identifying a use case and user-flow which they fulfill. Example use-case: How would a user of this tool search for a given developer and how can 3-4 key stats for the developer (commits vs time, Phabricator tasks commented on vs time) be summarized? What would be shown on the screen if one of these stats have to be explored further Bly clicking them?//
-- The corresponding mockup can be viewed live [here](https://nix07.github.io/Microtask3/index.html). Please refer the readme file present [here](https://github.com/Nix07/Microtask3) for the description.