Name : Nikhil Prakash
IRC nickname on Freenode : nix07
Email : firstname.lastname@example.org
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)
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 Wikimedia event organizers in supporting the candidates. Currently, Wikimedia uses Bitergia's analytics 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 to make it more accessible.
Have you contacted your mentors already?
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 select the platforms, i.e, a user may select all the three platforms or just the Gerrit to fetch the stats.
- 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 the 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 list and graphical statistics.
- 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:
- Unit tests for modules that fetch the contribution data and process it to produce the desired results.
- Research to understand the potential users' utility of this tool.
|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. Decide about the languages and technologies to be used by incorporating the advice of mentors. Get comfortable with Gerrit environment.|
|June 3 to June 9||Complete the implementation of UI and improve the same if needed.|
|June 10 to June 16||Implement the functionality of uploading CSV and Excel data. I plan to use File API to read the contents of the uploaded file, but will investigate other methods and 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 list of username, in Python. (Similar to Microtask 1 and 2.)|
|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. Start the implementation of back-end logic of the web app in Python.|
|July 8 to July 14||Complete the implementation of back-end logic and start integrating it with the front-end of the web app.|
|July 15 to July 21||Complete the implementation of basic web app, i.e integration of front-end and back-end, during this week.|
|July 22 to July 28||Phase II evaluation. Deploy the web app on Toolforge. Start testing and fix bugs simultaneously.|
|July 29 to August 4||Improve the performance of the web app using Google PageSpeed Insights tool as well as any other issues pointed by the mentors. (By this week, all the basic functionalities of the web-app would be implemented and the app would be hosted on Toolforge.)|
|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(list and graphics) 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 during the initial weeks of the internship, for deciding about the languages and technologies to be used.
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 for the same.
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. 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 Foundation.
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.
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 this MOOC by Hasura in partnership with IIT Madras. 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. As part of the internship, I developed a Food Delivery Web Application. The corresponding repository can be found here. Unfortunately, the app is not live now, but this video 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.
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.
- (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
- 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. 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.
- 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?