===Profile Information
**Name**: Raymond Olisaemeka Ndibe
**Timezone**: UTC+1
**Web Profile**: https://raymond-ndibe.netlify.com
**Resume**: https://drive.google.com/open?id=1yTsj7ICGBLhVi7ZW-sZPRUCdXOPhhc1I
**Github**: https://github.com/NdibeRaymond
**Location**: Nigeria
**Working Hours**: 10 am - 3 pm UTC+1, 8 pm - 12 am UTC+1
===Synopsis
WikiContrib is a tool for community members to visualize their technical contributions within a specified time range. It was developed because tools like bitergia are too technical for non-technical people to be able to effectively view users contributions. One of the use cases for this tool is when Wikimania scholarship committee is trying to evaluate scholarship applicants based on their contributions to decide who qualifies for the scholarship. Currently, the tool gathers statistics from Phabricator Maniphest and Gerrit. This proposal is about improving the tool further by working on the following features:
* Counting technical contributions made to Github repositories under Wikimedia and other popular projects that
are not necessarily under the Wikimedia account (e.g. wikiEduDashboard, apps-android-commons, etc).
* Counting technical contributions made by a user on-wiki such as modules and templates, user scripts and
gadgets
* Counting any other contributions that can be measured as per the technical contributor's map (Such as on Gitlab, BitBucket, JIRA, SourceForge, etc).
* Fetch the best user avatar and about information from the possible venues and display it alongside the
contributions statistics.
* Fix issue [#23](https://github.com/wikimedia/WikiContrib/issues/23). This involves implementing a feature that
verifies that submitted usernames does exist and belongs to the same user.
* Fix issue [#58](https://github.com/wikimedia/WikiContrib/issues/58) as well as add a "sort-by total contributions"
functionality to this issue's fix. This issue involves building a list view to make it easier to compare users
contributions side-by-side.
====Possible Implementation Methods
A major part of proposed features involve gathering data from different platforms. To gather the necessary data while avoiding latency issues, the proposed features need to implement with either of the following methods.
* Hit the APIs of the different platforms concurrently, aggregate and format the data, cache aggregated data, then return request.
* Hit bitergia API for users data for the different platforms, aggregate and format the data, then return request.
* Scrape bitergia dev console, aggregate and format the data, then return request.
====Why Is This Necessary?
According to the [Technical Contributors Map](https://m.mediawiki.org/wiki/Developer_Advocacy/Metrics#Technical_Contributors_Map), the tool in its present state only helps to visualize contributions made through Gerrit or Phabricator Maniphest. This means that contributions made to any Wikimedia related project on Github, Gitlab, Bitbucket, JIRA, SourceForge Wikimedia Phabricator Differential/Diffusion and technical contributions made by a user on-wiki (such as modules and templates, user scripts & Gadgets, etc) are currently not being accounted for by WikiContrib. Wikimedia Github account alone has 2200 repositories under it and according to the [Technical Contributors Map](https://m.mediawiki.org/wiki/Developer_Advocacy/Metrics#Technical_Contributors_Map) any contribution made to half of those repositories are not being covered by WikiContrib. The problem with this is that users making contributions to projects on any of the above listed platforms are not being properly represented, if they apply to Wikimania scholarship and this tool is to be used for candidate evaluation, they won't stand a chance of being selected. The proposed features will help solve these issues.
====How Will The Proposed Features Benefit Wikimedia Projects?
This tool was developed because among other things, it could also help Wikimedia project maintainers discover contributors who have the potential of becoming long-term contributors and help them grow. Right now, the tool is only partly fulfilling that purpose. The proposed features will further broaden the scope of this tool, accounting for contributions made to wikimedia projects on all the above listed platforms previously unaccounted for, bringing many more potential long-term contributors under the radar of project managers. This will help ensure that the projects will have enough dedicated contributors to keep on maintaining them in the future.
====Do You See Any Risks/Concerns Involved In implementing The Planned Features?
Given the number of platforms we need to gather information from, the major problem I see has to do with latency. Depending on the implementation method taken, to avoid latency, there might be a need to obtain authorisation for certain APIs and tools. This might take sometime to obtain. I submitted a [research PR](https://github.com/wikimedia/WikiContrib/pull/179) on ways to avoid this, the advantages and disadvantages.
**Mentor(s)**: @srishakatux @Rammanojpotla @Tuxology
- Have you contacted your mentors already? Yes
===Deliverables
| Period | Task
| ----- | -----
| Apr 27 - May 5 | **community bonding** • Get to know more about the community and its members • Fix issue [#23](https://github.com/wikimedia/WikiContrib/issues/23) • Request for access to any relevant APIs like bitergia.
| May 5 - May 12 | Gather information, ask questions about the confusing parts of the features to be implemented • Create plans and designs of how the finished implementation would look and work • Share the designs with the mentors and get feedback
| May 12 - May 17 | Start Working on the feature to count contributions on GitHub.
| May 17 - May 23 | Start Working on the feature to count contributions on Gitlab.
| May 23 - May 28 | Start Working on the feature to count contributions on Bitbucket.
| May 28 - Jun 2 | Build the UI to display the additional contributions that would be coming with the backend data and ensure it doesn't affect the existing UI
| Jun 2 - Jun 7 | **Feedback and wrap up of the Github, Gitlab, Bitbucket contributions counting phase**
| Jun 7 - Jun 12 | Start Working on the feature to count contributions on SourceForge.
| Jun 12 - Jun 17 | Start Working on the feature to count contributions on JIRA.
| Jun 17 - Jun 22 | Start working on the feature to count contributions on Phabricator Differential/Diffusion, etc.
| Jun 22 - Jun 28 | Build the UI to display the additional contributions that would be coming with the backend data and ensure it doesn't affect the existing UI
| Jun 28 - Jul 5 | **Feedback and wrap up of the Source Forge, JIRA, Phabricator Differential/Diffusion contributions counting phase**
| Jul 5 - Jul 10 | Start working on the feature to count technical contributions by users on-wiki for modules, templates.
| Jul 10 - Jul 15 | Start working on the feature to count technical contributions by users on-wiki for user scripts and gadgets, etc
| Jul 15 - Jul 25 | start working on the fix for issue [#58](https://github.com/wikimedia/WikiContrib/issues/58)
| Jul 25 - Aug 1 | Build the UI to display the additional contributions that would be coming with the backend data and ensure it doesn't affect the existing UI
| Aug 1 - Aug 6 | **Feedback and wrap up of on-wiki contributions counting phase**
| Aug 6 - Aug 11 | Modify the backend to fetch best user avatar and about information from the possible sources and add it to the data being returned from the backend. Build the UI to display the additional user information like avatar coming from the backend
| Aug 11 - Aug 18 | **Feedback and wrap up of the whole project**
===Other Deliverables===
* Blog post on my progress every week
* Regular communication with my mentor(s) and other community members
===Participation
Describe how you plan to communicate progress and ask for help, where you plan to publish your source code, etc
* I will continue using my existing fork of the wikiContrib repository to upload changes made and create pull-requests for mentor(s) to review and merge
* I will be online on IRC in my working hours (10 am - 3 pm UTC+1, 8 pm - 12 am UTC+1) to collaborate with mentors and
community members.
* I will use Phabricator as well as Github for managing bugs and subtasks.
* I will be available on Gmail to be contacted when needed in the non-working hours.
===About Me
**Your education (completed or in progress)**
I am a Google Africa Developer Scholar yet to take my certification exams. I Obtained a Diploma in electrical / electronics Engineering in 2016 from DonBosco Institute of Technology Anambra Nigeria.
**How did you hear about this program?**
This is my first Outreachy application and I heard about it from my friend and mentor who inspired me to become a developer. I registered because I saw that Outreachy is an equal opportunity program, where your race, ethnicity, financial status, gender identification, formal educational background and the other things that normally matter in the society I live in doesn't matter and doesn't decide if you are selected or not.
**Will you have any other time commitments, such as school work, another job, planned vacation, etc, during the duration of the program?**
I am free from any time commitment throughout the duration of the internship
**What does making this project happen mean to you?**
From a career perspective, making this project happens means I finally get a chance to work on something really important and not just to-do apps and a few other hobby projects. It means I finally get to build something that actual people are going to use. Everyone wants a chance to be part of something bigger than themselves but not everyone gets to achieve that desire. Working on something as important as this will really be a boost to the career of a beginner like me. I have been having a hard time landing a job as a software developer, this project means I get to prove I can work on a project independently while working on a project that actual people are going to use.
Financially, this project is exactly what I need to kick-start my life. I left the little job I had to become a developer and it has been rough ever since. The funds from this internship will enable me to further my education. It will help me purchase software development courses I need to improve myself, attend important software conferences to network and connect with fellow developers and to start working towards obtaining a degree.
===Past Experience
I am a beginner mobile web specialist and associate cloud engineer with experience in HTML, CSS, Javascript, Python, Git, DialogFlow, Google cloud. Prior to this program, I have developed a number of React and Django based web-apps which can be found in the "Projects" section below. The full list of my projects can be found on my [personal website](https://raymond-ndibe.netlify.com).
I am a member of Open-source Community Africa (OSCA), Google Developer Group (GDG) and Andela Learning Community
=====Skills
* Languages: Python, Javascript
* Frameworks: Django, Bootstrap
* Web Technologies: HTML, CSS, SASS
* Version Control Systems: Git
* Databases: SQLite, Postgresql, MongoDB, Firebase
* Libraries and tools: Django Rest Framework, React, React-Redux, Selenium, Kubernetes
* Cloud Platforms: Google Cloud, Heroku, DigitalOcean, Pythonanywhere
====Projects
[Tillate](https://tillate.herokuapp.com/)
A React based event ticket selling app.
Note: This project is hosted on heroku free account so will take some time to restart server after 30mins of no visit.
[Huddle Lite](https://ndiberaymond.github.io/huddle/)
A Single Section Modern Landing Page Design Coding Challenge
[Diahomes](https://diahomes.com/)
A Django based property listing site
[WriteSpace](http://ndiberaymond.pythonanywhere.com/posts/all/)
WriteSpace is my personal blog project. (I will be cleaning it up and repurposing it for the purpose of Outreachy project if I am ever selected)
[Google Home Page Mockup](https://googlesearchsitemockup.herokuapp.com/)
Google Search Site Home Page and Result Page Mockup.
Note that this is a heroku hosted project and that loading might take some time if the site hasn't been visited in the past 30mins
====Open-source Contributions====
**Google Web Fundamentals Website**
Google web fundamentals is a free and open-source project with the goal of educating people on how to build modern websites with best practices in mind.
| Status | Issue | PR Title | PR
| ------- | ------ | -------- | ----
| Merged | [#123](https://github.com/google/WebFundamentals/issues/8362) | Fixed error in url | [#8367](https://github.com/google/WebFundamentals/pull/8367)
| Merged | [#8330](https://github.com/google/WebFundamentals/issues/8330) | Fixed Typo in Full Screen Video method | [#8368](https://github.com/google/WebFundamentals/pull/8368)
| Merged | [#8359](https://github.com/google/WebFundamentals/issues/8359) | Fixed a typo | [#8366](https://github.com/google/WebFundamentals/pull/8366)
**WikiMedia WikiContrib Tool**
| Status | Issue | PR Title | PR
| ------- | ----- | --------- | -----
| Merged | [#165](https://github.com/wikimedia/WikiContrib/issues/165) | automated backend url selection based on environment | [#170](https://github.com/wikimedia/WikiContrib/pull/170)
| Merged | [#133](https://github.com/wikimedia/WikiContrib/issues/133) | made conversion to epoch time operations platform independent | [#135](https://github.com/wikimedia/WikiContrib/pull/135)
| Merged | [#127](https://github.com/wikimedia/WikiContrib/issues/127) | fixed server error 500 while uploading csv with non-english characters | [#129](https://github.com/wikimedia/WikiContrib/pull/129)
| Merged | [#125](https://github.com/wikimedia/WikiContrib/issues/125) | Fixed csv upload error in windows and Android devices | [#128](https://github.com/wikimedia/WikiContrib/pull/128)
| Merged | [#158](https://github.com/wikimedia/WikiContrib/issues/158) | created research.md file for issue #110 and #58 | [#179](https://github.com/wikimedia/WikiContrib/pull/179)
| Pending | [#123](https://github.com/wikimedia/WikiContrib/issues/123) | fixed time range form field bug | [#177](https://github.com/wikimedia/WikiContrib/pull/177)
| Merged | [#114](https://github.com/wikimedia/WikiContrib/issues/114) | Improved the responsiveness of the tool on mobile devices | [#120](https://github.com/wikimedia/WikiContrib/pull/120)
| Merged | [#23](https://github.com/wikimedia/WikiContrib/issues/23) | [un-mergeable] Fuzzy matching research | [#159](https://github.com/wikimedia/WikiContrib/pull/159)
| Merged | [#115](https://github.com/wikimedia/WikiContrib/issues/115) | Improved accessibility to 100% lighthouse rating | [#119](https://github.com/wikimedia/WikiContrib/pull/119)
| Merged | [#112](https://github.com/wikimedia/WikiContrib/issues/112) | Added windows setup guides and fixed typos in the exisiting setup guides | [#118](https://github.com/wikimedia/WikiContrib/pull/118)
| Merged | [#111](https://github.com/wikimedia/WikiContrib/issues/111) | removed unused babel/types import | [#113](https://github.com/wikimedia/WikiContrib/pull/113)
| Merged | [#108](https://github.com/wikimedia/WikiContrib/issues/108) | Made improvements to WikiContrib tool documentation on wikicontrib.readthedocs.io | [#109](https://github.com/wikimedia/WikiContrib/pull/109)