===Profile Information
Name : Lalit Suthar
IRC nick : lalit97
Email : sutharlalit.97@gmail.com
Github : http://github.com/lalit97
Location : India
Typical working hours : 11 AM to 7 PM and 10 PM to 12 AM(UTC +5:30)
===Synopsis
> Short summary describing your project and how it will benefit Wikimedia projects
Wikimedia has a large pool of developers and contributors. To track any individual developer’s activity and how much development is happening on any project is a difficult task. Previously it was done using Bitregia’s Analytics tool, but it’s too hard to use and requires a lot of effort from the organizer’s side.
Developer Activity Tracker will solve this problem keeping the developer’s data in focus. Any organizer can view the data of a developer using a simple interface which provides relevant data in a Intuitive and meaningful way. This tool will provide data like Open/Merged commits, Phabricator tasks data and Recent Activity will be provided to the end user of the tool.
Solution : [[ https://drive.google.com/file/d/1GqV9eos-DJn3HwIgzhYES7Ke-mbOezdOTnRR_A3mzXvp-kkKi1fxgJ4uDCMVPNV0/view?usp=sharing | mockup-designths=true | Developer Activity Tracker ]]
> Possible Mentor(s)
@srishakatux, @Tuxology, @D3r1ck01, @samuelguebo
> Have you contacted your mentors already?
Yes I have contacted them on Phabricator and Zulip.
===Deliverables
- Screen for uploading of CSV.
- Gerrit stats chart. (Phase I)
- Phabricator stats Chart. (Phase II)
- Recent Activity. (Phase III)
===Timeline
> May 7 to May 26 ( Community Bonding Period):
Discussing ideas about UI/UX design for the tool. Sorting out implementation details like which library should be used for drawing charts.
> Week 1 (May 27 to June 2):
- Setting up project
- Creating landing page to upload the CSV file of usernames via file upload or a text field.
- Creating List view of usernames from above uploaded input data. Which can be used to view individual developer’s data.
> Week 2 (June 3 to June 9):
- Working on Backend implementation for Gerrit section of data.
- Fetch the data and expose an API for it built in Django.
> Week 3 (June 10 to June 16):
- Integrate the Gerrit data to charts in the frontend using a js library.
- Implement filters for month/year in the data.
- Deploy the version1 to follow Iterative deployment strategy.
> Week 4 (June 17 to June 23)
- Test out the phase I deliverable.
- Clean up code as per reviews.
- Fix bugs in phase I.
- Write test cases.
> Week 5-6 (June 24 to July 7)
- Start Working on Phabricator section.
- Write Backend APIs to get data of user from phabricator.
- Show data with filter option by month/year.
- Integrate it with frontend to complete phase II.
> Week 7 (July 8 to July 14)
- Test and get feedback upto phase II.
- Fix bugs.
- Clean up code as per reviews.
- Writing test cases.
> Week 8-9 (July 15 to July 28)
- Working on Recent Activity Section.
- Fetch data from both Gerrit and Phabricator to be described as user’s Recent Activity.
- Integrate it with frontend as per the design above.
> Week 10-11(July 29 to August 11)
- Testing for phase III.
- Writing unit tests for all 3 phases.
- Write documentation for all 3 phases.
- Fix bugs and errors for overall projects.
- Work on Performance improvements.
> Week 12 (August 12 to August 19)
- Deploy and get feedback from the community and users.
- Fix bugs and improve documentation if needed.
===Participation
- I will use Github to version control my code. Each feature will be a new branch, and will be deployed in a iterative cycle.
- I will get feedback on code and functionality after each deliverable.
- I will be active on Zulip to communicate with mentors.
- I will talk to mentors on zulip for any design decision, feature implementation, bug or code review discussion.
- I will write blog posts regularly about my experience and learnings from this project.
===Implementation Details
{F28598873}
===Description about UI mockup
Landing Page : This one is landing page user can enter developer's username
or upload a CSV file containing list of usernames.
{F28598848}
List view of developers : In case of CSV file uploaded we can show a list of developers on this page. By clicking on particular name we can show detail of that developer.
{F28598858}
Detail view of developers : In detail view we will have 3 different sections for Gerrit, Phabricator and Recent Activity.
1. Gerrit Section
I thought we can have a Contribution vs time graph for showing commits of user.
Also for showing open/merged commits I have chosen a line graph. We can have a heatmap like graph like github has for commit activity with numbers being shown when hovering on any day.
{F28598864}
2. Phabricator Section
In this section I have made two Bar graphs one for comments and other one for subscriptions.
By default It will take current month and date. It will have filters to choose month and year, based on that another API call will happen which will return the relevant data and it will be rendered.
{F28598866}
3. Recent Activity Section
I thought we can show some Recent Activity of developer. So that the user can have some idea what the developer is doing currently.
{F28598869}
Also there are other things which we can implement if we have time left at the end,
Gerrit :
Repositories contributed : Show the repositories on which user has contributed.
Phabricator:
Badges : Badges received by user on phabricator shows the work being appreciated by peers.
Code Review : Amount of code review requests done by a particular user.
Recent Activity:
Commits in Repos : On which repos user has committed recently.
Pull requests : Pull requests created recently by the user.
===About Me
> Your education (completed or in progress)
I am currently a student of b.tech 3rd year in information technology branch at Government Engineering College Bikaner.
> How did you hear about this program?
I came to know it from my friends and teachers. And learnt more about it through social media platforms like twitter, quora and gsoc’s official page.
> Will you have any other time commitments, such as school work, another job, planned vacation, etc, during the duration of the program?
No, I have no other time commitments in during this summer. No vacation planned as well. I will be staying at home.
> 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)?
No I am applying for Google summer of Code only.
> What does making this project happen mean to you?
I have learnt certain things and programming languages and have made some utility projects using Python/Django. But I was looking for a impactful project in which I can apply and improve my skills in both frontend and backend further. So this project is exactly what I am looking for and it will help in growing my self confidence in web development. It will also give a great platform to learn by developing for a real use case and to learn from user feedback.
===Past Experience
Previously I have worked on Algorithmic problem solving on on [[ https://www.hackerrank.com/lalit122 | Hackerrank ]].Skills
- Beginner : C, C++, Php
- Medium : Python
- Frameworks : Django, Bootstrap
- Web Technologies : Html, CSS, JavaScript
- Others : Web Scraping with BeautifulSoup, Selenium, Requests
- Version Control : Git
- Database : mysql
Projects
I have made a copy of my [[ https://github.com/lalit97/college-site | college-website ]] using Html, CSS and a [[ https://github.com/lalit97/Tic-Tac-Toe | Tic-Tac-Toe ]] game using Javascript.- [[ https://github.com/lalit97/Tic-Tac-Toe | Tic Tac Toe ]] (JavaScript)
I have made projects using python-django like [[ https://github.com/lalit97/Blog-app- | Blog-app ]] and [[ https://github.com/lalit97/polls-app | polls-app ]].- [[ https://github.com/lalit97/college-site | College Website ]] (HTML/CSS)
- [[ https://github.com/lalit97/Blog-app- | Blog App ]] (python-django)
- [[ https://github.com/lalit97/polls-app | Polls App ]] (python-django)
- [[ https://github.com/lalit97/contacts-app | Contacts App ]] (python-django)
Other than that I have worked on c++, php, Jquery, Bootstrap and I have explored things in Python like web scraping through Beautiful soup and Selenium, requests.Problem Solving Profiles
- [[ https://www.hackerrank.com/lalit122 | HackerRank ]]
- [[ https://www.hackerearth.com/@lalit122/ | HackerEarth ]]
===Contributions
- **(open)** [[ https://phabricator.wikimedia.org/T216399 | `T216399` ]] : Allow wildcard hashtag searches. [[ https://github.com/Samwalton9/hashtags/pull/10/ | pull request ]]
- **(open)** [[ https://phabricator.wikimedia.org/T216400 | `T216400` ]] : Allow wildcard project searches. [[ https://github.com/Samwalton9/hashtags/pull/15 | pull request ]]
===Microtasks carried out
There are 3 microtasks given on this project which I have completed.
- Write a program in Python to- To fetch for a user number of patches merged within a specific timeframe on Gerrit.
solution : [[ https://github.com/lalit97/Pygerrit/blob/master/issue_fetcher.py | Microtask 1 ]]
- 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.
{F28598841}
- 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.
solution : [[ https://github.com/lalit97/Pygerrit/blob/master/task_statistics.py | Microtask 2 ]]
- 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?
solution : [[ https://drive.google.com/file/d/1GqV9eos-DJn3HwIgzhYES7Ke-mbOezdO/view?usp=sharing | Microtask 3 ]] {F28598839}
Performance was an big issue for this microtask when the user has subscribed to around 600 tasks. Now to get the subscription time we have to call 600 API's in that case.
Simple python requests were taking around 1 second for each call and that was taking around 10 minutes to get the output.So we can used to Asynchronous Requests to call API's (https://github.com/kennethreitz/grequests). A short [[ https://docs.google.com/document/d/1waviumcfRUPime1pGlbm5F89ugJxumUVArYs3ZZEFcs/edit | description ]] about it.It can make the execution about 20 times faster than before.
{F28598834}
Code for the following screenshots can be found here
- [[ https://github.com/lalit97/Pygerrit/blob/master/sync_requests.py | sync requests ]]
- [[ https://github.com/lalit97/Pygerrit/blob/master/async_requests.py | async requests ]]
- create a preliminary mockup for the first few screens (2-3) of this application/tool
solution : [[ https://drive.google.com/file/d/1TnRR_A3mzXvp-kkKi1fxgJ4uDCMVPNV0/view?ths=true| Microtask 3 ]]