Page MenuHomePhabricator

[Outreachy 2020 Proposal] Gather & analyze user contributions on wiki & Github
Closed, ResolvedPublic

Description

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. This involves implementing a feature that verifies that submitted usernames does exist and belongs to the same user.
  • Fix issue #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 the proposed features involve gathering data from different platforms. To gather the necessary data while avoiding latency issues, the proposed features need to be implemented 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.

Each of the above methods have there pros and cons. While some requires authorization to certain APIs and tools to work, some have latency problem. I plan on settling for a middle ground.

Why Is This Necessary?

According to the 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 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 authorization for certain APIs and tools. This might take some time to obtain. I submitted a research PR on ways to avoid this, the advantages and disadvantages.

Mentor(s): @srishakatux @Rammanojpotla @Tuxology

  • Have you contacted your mentors already? Yes

Deliverables

PeriodTask
Apr 27 - May 5community bonding • Get to know more about the community and its members • Fix issue #23 • Request for access to any relevant APIs like bitergia.
May 5 - May 12Clean up my blog and make it ready to accept posts • 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 17Start Working on the feature to count contributions on GitHub.
May 17 - May 23Start Working on the feature to count contributions on Gitlab • Post the topic for the week on my blog
May 23 - May 28Start Working on the feature to count contributions on Bitbucket.
May 28 - Jun 2Build the UI to display the additional contributions that would be coming with the backend data and ensure it doesn't affect the existing UI • Post the topic for the week on my blog
Jun 2 - Jun 7Feedback and wrap up of the Github, Gitlab, Bitbucket contributions counting phase
Jun 7 - Jun 12Start Working on the feature to count contributions on SourceForge • Post the topic for the week on my blog
Jun 12 - Jun 17Start Working on the feature to count contributions on JIRA.
Jun 17 - Jun 22Start working on the feature to count contributions on Phabricator Differential/Diffusion, etc • Post the topic for the week on my blog
Jun 22 - Jun 28Build 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 5Feedback and wrap up of the Source Forge, JIRA, Phabricator Differential/Diffusion contributions counting phase
Jul 5 - Jul 10Start working on the feature to count technical contributions by users on-wiki for modules, templates • Post the topic for the week on my blog
Jul 10 - Jul 15Start working on the feature to count technical contributions by users on-wiki for user scripts and gadgets, etc
Jul 15 - Jul 25start working on the fix for issue #58 • Post the topic for the week on my blog
Jul 25 - Aug 1Build 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 6Feedback and wrap up of on-wiki contributions counting phase
Aug 6 - Aug 11Modify 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 • Post the topic for the week on my blog
Aug 11 - Aug 18Feedback 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.
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
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
A Single Section Modern Landing Page Design Coding Challenge

Diahomes
A Django based property listing site

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

StatusIssuePR TitlePR
Merged#123Fixed error in url#8367
Merged#8330Fixed Typo in Full Screen Video method#8368
Merged#8359Fixed a typo#8366

WikiMedia WikiContrib Tool

StatusIssuePR TitlePR
Pending#23Checked if usernames are valid or linked to the same person#186
Merged#165automated backend url selection based on environment#170
Merged#133made conversion to epoch time operations platform independent#135
Merged#127fixed server error 500 while uploading csv with non-english characters#129
Merged#125Fixed csv upload error in windows and Android devices#128
Merged#158created research.md file for issue #110 and #58#179
Pending#123fixed time range form field bug#177
Merged#114Improved the responsiveness of the tool on mobile devices#120
Merged#23[un-mergeable] Fuzzy matching research#159
Merged#115Improved accessibility to 100% lighthouse rating#119
Merged#112Added windows setup guides and fixed typos in the exisiting setup guides#118
Merged#111removed unused babel/types import#113
Merged#108Made improvements to WikiContrib tool documentation on wikicontrib.readthedocs.io#109

Event Timeline

Raymond_Ndibe renamed this task from [Proposal] Gather & analyze user contributions on wiki & Github to [Outreachy 2020 Proposal] Gather & analyze user contributions on wiki & Github.Apr 1 2020, 10:02 PM
Raymond_Ndibe removed a project: WikiContrib.

@Raymond_Ndibe Hi! Your proposal looks great :) I don't see anything super important that is missing in the proposal. I have a couple of questions if you want to consider answering them in your proposal:

  • How the planned features for WikiContrib will benefit Wikimedia projects, and what making this happen means to you?
  • Do you see any risks/concerns involved with implementing the planned features?

Make sure to upload the proposal on the Outreachy site and record all your contributions before the deadline. Good luck!

I made the changes you requested @srishakatux . You can review when you have the time

@Raymond_Ndibe Thanks for making the changes, all sounds good to me. I've no further questions :)