=**Profile**=
**Name: **Rammanoj Potla
**Email:** rammanojpotla1608@gmail.com
**MediaWiki Username:** [[ https://phabricator.wikimedia.org/p/rammanojpotla/ | Rammanojpotla ]]
**Github:** [[ https://github.com/rammanoj | rammanoj ]]
**Gerrit:** [[ https://gerrit.wikimedia.org/r/#/q/owner:+rammanoj+status:+merged | rammanoj ]]
**IRC Username:** rammanoj__
**Time zone:** UTC + 5:30 (IST)
**Location:** Kerala, India
**Working Hours (in IST):** Weekdays - 17:00 to 23:30 and Weekends- 09:00 to 23:30
=**Summary**=
There are many developers contributing to MediaWiki (through patches, commits, etc) via different platforms like **Gerrit**, **GitHub** and **Phabricator**. Currently, the developer activity is tracked by [[ https://wikimedia.biterg.io/ | Bitergia's analytics ]].
The project is about developing a tool (from scratch) to track the activity of developers and contributors by the event organizers. The tool uses the API’s of Gerrit and Phabricator and fetches the contributions of the user. The fetched contributions of a developer will be represented by the tool in the form of some graphs.
Mentors: @srishakatux, @D3r1ck01, @Tuxology, @samuelguebo
=**Deliverables**=
- **Adding the username:**
- As an initial version, the tool allows uploading the Github, Gerrit and Phabricator usernames of the list of many users in a CSV file.
- There will also be an option provided to add usernames of the Gerrit, GitHub and phabricator of a specific user directly from the tool.
- The usernames from the different platforms will be stored in the tool.
- **Fetch the user contributions:**
- Whenever an event organizer queries about a developer (along with the platform like Gerrit, Phabricator). The API will be fetched and the information will be displayed.
- There can be several filters added while fetching the data from the API. So that this can improve usability.
- In the case of Gerrit these filters can be added:
- **Status** -- Indicates the present status of the issue (i.e merged, needs review etc).
- **time frame** -- fetches the contributions of a user the specified timestamp.
- **Project** -- By the project the user worked with (i.e may be the extension).
- **Display the user data (fetched using the API):**
- There can be different formats in which the data can be displayed like:
- List format
- Graphical format, using the histograms
- Graphical format, using the pie charts
- The user to the tool can select one of the above formats so that the fetched data will be displayed in the above formats.
=**Implementation**=
- **Adding the usernames of different platforms to the tool**
- In this phase, a CSV file of different usernames of the user can be uploaded. There will be some cases where the CSV file size will be around 400mb or greater. So, to process the upload of CSV files with higher size, the entire file will be divided into chunks of small packets and will be uploaded (i.e the chunked upload will be used).
- This is a sample mockup how the upload file UI can look like
{F28591204}
- **Fetching the usernames when queried:**
- Whenever a search is made for the username of a specific user in a particular platform (i.e Gerrit or Phabricator). There can be a recommender system used to recommend the usernames (i.e as the event organizer type some alphabets of the username, all the matching usernames will be displayed in a dropdown). So that username from the displayed ones can be selected for fetching the API.
- Whenever a user of the tool enters the username of a developer along with the platform in which the contributions of the developer has to be fetched. There will be some filters provided to the user, that can be used in fetching more specific data. So, whenever a user fetches the data, a loading symbol is displayed until the API request is completed.
- The basic UI to the above operation can be alike:
**while selecting the platform**:
{F28591207}
**On searching for usernames:**
{F28591209}
- **Display the user data (fetched using the API):**
- Once the user data is fetched from the corresponding API. The details will be being displayed default in the list view.
- There can be some other graphical views provided for viewing the data. The user can select one of those views to view the data. In the case of graphical views, some of the chart plotting libraries (like CanvasJS) can be used here.
- So, in the case of charts, they can be plotted like **no. of contributions** vs **time**.
- In case of a bar graph, each bar can be represented for a year initially. So, if a specific bar is clicked, a new graph is plotted with all the contributions made in that specific year, each bar representing a month. This can even proceed for the days in the month.
- This can be the basic mockup for the design:
**Bar Graph:**
{F28591219}
**Pie Graph:**
{F28591222}
**Tech stack (possibly used):** python (Django/Flask), React.JS, CanvasJs
=**Timeline**=
| **Tasks to be completed** | **Time Period** |
| --------------------------------- | ------------------- |
|**Community bonding period:** In this stage, I will discuss with the mentors about the exact technologies used in developing the tool and their suggestions to move forward in the project. I will be occupied with final exams for ten days. I can not work from 7th May to 17th May. Apart from that, I can spend all my time working on the project. | May 17, 2019 to May 27, 2019 |
| Start with the first phase of the project and focus more on implementing the functionality part of the first task in this phase. Implement the feature of basic CSV file uploads and storing the information in the database.| May 27, 2019 to June 7, 2019|
|Add some other features to the above functionality like uploading multiple files once etc. Implement the complete UI to the above functionality and getting it reviewed from the mentor.| June 8, 2019 to June 17, 2019|
| Fix all the bugs in the above functionality, along with minor UI changes.| June 18, 2019 to June 23, 2019|
|**Phase I Evaluation**, get the suggestions from the mentor about the above functionalities and fix them all.| June 24, 2019 to June 28, 2019|
|Implement a feature the second functionality of recommending the usernames on typing the partial text in the search bar (inefficient manner). Also, work with the UI of the feature. Add the feature to select the platform from which the contributions have to be displayed.| June 29, 2019 to July 6, 2019|
| Add some additional filters for getting more precise information. Implement the actual API request and fetch the information. The API requests will be implemented as asynchronous ones. So, if there are a number of requests to be made, multiple ones can be made simultaneously without any delay.| July 7, 2019 to July 13, 2019|
|Finally, test all the above features added. Update the UI according to the requirements specified| July 14, 2019 to July 21, 2019|
|**Phase II Evaluation**, get the suggestions from the mentor about all the above-implemented functionalities and UI and fix them all.| July 22, 2019 to July 26, 2019|
|As the final functionality of the project, display the fetched information in the form of the listview. Also, add the better UI to the list view.| July 26, 2019 to August 1, 2019|
|The user can select the format in which the data can be viewed. Chart library will be integrated into the project. The user will be provided with the option to specify the data in the form of pie and bar graphs| August 2, 2019 to August 11, 2019|
|Fix all the bugs in UI for the above functionality| August 12, 2019 to August 18, 2019|
=**About Me**=
I am a Junior in Computer Science and Engineering at Amrita University, Amritapuri, India. Apart from academics, I contribute to Free and Open Source Softwares. I am a member of the FOSS club of our university, FOSS@Amrita. I have solid experience with git, Gerrit and various other OSS tool. I also have hands-on experience with web development and designing. With more than one year of experience in contributing MediaWiki, I have fixed around 15 to 16 bugs in various extensions and Vector skin. I am eagerly looking forward to start contributing to this project as part of GSoC 2019 and more.
=**Previous Experience**=
- **Designed school management software:** Designed a web application for schools. This includes an admin panel where marks, attendance of students along with current activities and announcements, can be hosted. This also contains a parent portal through which parents can get access to their wards marks and attendance. Apart from HTML and CSS, I mainly used JavaScript, JQuery, Bootstrap for the front-end design of the site. For the back-end, PHP and MySQL were used.
- **Developed a Medical HealthCare project:** As a part of the SLAC hackathon, We developed a project that implements some ML algorithms and gives out some of the top matching diseases for some given symptoms. There can be rating associated with each and every search result. This app is mainly for doctors, each doctor can add experience for the diagnosis he/she performed. Finally, we were second in the hackathon.
- **Designed a Shopping cart:** Designed a simple shopping cart application where the users can view, cart and buy items. There is a simple login panel where the users have to log in to access the above features. This login page validation is done using AngularJS. I mainly used HTML, CSS, javascript and AngularJS in this application. Github: [[ https://github.com/rammanoj/Shopping-cart | repo ]]
**Technical Skills**
**Programming Languages:** Python, JavaScript, PHP, Java, C, C++(Beginner)
**Other Languages:** HTML, CSS
**Frameworks:** ReactJS, ReactJS-material, AngularJS(Beginner) JQuery, Bootstrap, Python-Django, Flask(Beginner)
**Databases:** MySQL, SQLite, Postgresql, MongoDB(Beginner)
**Operating systems:** Windows, Linux
**Queries**
**Have you participated in the Google Summer of Code in the past?**
Yes, I have participated in GSoC last year. I applied for MediaWiki.
**Are you applying to any other organizations this year?**
No, I am not applying to any other organisations except MediaWiki
=**Micro Tasks:**=
- **Task-1:** Using the Gerrit API to fetch user contributions in a specific timeframe, [[ https://github.com/rammanoj/Mediawiki_micro_task/blob/master/task1.py | link
]]
- **Task-2:** Using the Phabricator API to fetch all the user subscriptions and display them in the form of a table (weekly) or histogram, [[ https://github.com/rammanoj/Mediawiki_micro_task/blob/master/task2.py | link
]]
- **Task-3:** To design some basic mockups to the tool, The mockups are added along with the proposal.