Page MenuHomePhabricator

GSoC Proposal : Develop a tool for use by event organizers to track developer activity
Closed, DeclinedPublic

Description

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 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.

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 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.

Timeline

PeriodTask
May 7 to May 26Community 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.
May 27 to June 2Start the implementation of responsive UI. Although I’m planning to use canvasJS for rendering charts, I’ll investigate other JavaScript libraries also during this week.
June 3 to June 9Complete the implementation of UI and improve the same if needed.
June 10 to June 16Implement 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 23Implement 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 30Phase I evaluation. Test and fix bugs.
July 1 to July 7Read 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 14Complete the implementation of back-end logic and start integrating it with the front-end of the web app.
July 15 to July 21Complete the implementation of basic web app, i.e integration of front-end and back-end, during this week.
July 22 to July 28Phase II evaluation. Deploy the web app on Toolforge. Start testing and fix bugs simultaneously.
July 29 to August 4Improve 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 11Implement 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 25Gather 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 2Mentors submit final student evaluations.
September 3Final 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.

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 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. 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.

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 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.

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 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.

Apart from Wikimedia, I have contributed to some other open source projects like Oppia, babel-plugin-remove-test-ids.

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. 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. Conduit API 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. Please refer the readme file present here for the description.

Event Timeline

Restricted Application added a subscriber: Aklapper. · View Herald TranscriptMar 30 2019, 4:12 PM
Nikhil07prakash renamed this task from GSoc Proposal : Develop a tool for use by event organizers to track developer activity to GSoC Proposal : Develop a tool for use by event organizers to track developer activity.Mar 30 2019, 4:12 PM

Hi @Nikhil07prakash Thanks for this very well written proposal 👏 I don't have any specific comments except that instead of jumping directly on the UI implementation in the week of "May 27 to June 2", it may be beneficial to allocate some time on refining mockups and user interaction flow as well.

Thanks, @Tuxology for the review.

I was thinking to complete the refining of mockups and user interaction during the community bonding period, i.e, between "May 7 to May 26". Do you think, it would be better to allocate more time for it?

If you would like us to consider your proposal for review, please move it to the submitted column on Google-Summer-of-Code (2019) board.

(look for next steps in the email you'll receive shortly with an option to request for a debrief on why your proposal was not accepted)

srishakatux closed this task as Declined.May 7 2019, 12:25 AM