**Name** : Udokaku Ugochukwu
**Github**: [[ https://github.com/UdokaVrede | UdokaVrede ]]
**IRC nickname on Freenode** : Udokaku Ugochukwu
**Location (country or state)** : Rivers, Nigeria
**Time Zone** : (UTC + 01:00) West Central Africa
**Typical working hours (include your timezone)**: 10 AM - 6 PM (UTC + 01:00) West Central Africa
**Project Task**: [[ https://phabricator.wikimedia.org/T263678 | T263678 ]]
Wikipedia’s vision of the world is one in which everyone can share in the sum of all knowledge. However this goal has not been fully achieved, because achieving this goal requires the availability of multiple language editions of Wikipedia contents to be shared. Having more contributors would mean more content for more people in their different languages.
At the time of writing this, Wikipedia has about **54 million** articles written in **309** different languages, but there is an underlying problem of divergence of information between different editions of the Wikipedia content, which is could be due to:
- The ideological bias of the contributors.
- Community with lesser contributors and more content to handle, requiring more time to provide contents. e.t.c
Wikipedia proposed an architecture for a system that would bring solutions to these existing problems by breaking down its goal into 2 projects:
- **Abstract Wikipedia**: a project that provides natural language independent encyclopedic content for items in Wikipedia in abstract notation, it allows for creating, editing and maintaining content.
- **Wikilamba**: a project that houses functions, algorithms and linguistic knowledge required for encoding abstract content from Abstract Wikipedia to natural language. Abstract Wikipedia is therefore built on Wikilamba.
The creation of these projects will lead to the creation of an open, widely usable, well tested natural language generation library on the Web, covering many different languages.
The [[ https://meta.wikimedia.org/wiki/Abstract_Wikipedia | goal of Abstract Wikipedia ]] is to let more people share more knowledge in more languages. Abstract Wikipedia is an extension of Wikidata. Abstract Wikipedia requires functions that take abstract content as the input and return natural language text as the output. This is expected to be done multilingual and requires a rich environment to create and maintain the functions, and at the same time allow more people to contribute knowledge and reach more people with their contributions, no matter what their respective language background is.
**Wikipedia Info-boxes **are tools placed at the top-right corner in desktop view and at the top in mobile view of a Wikipedia article that gives an overview or summary of the information in an article.
On Wikipedia, an info-box is transcluded into an article by enclosing its name and attribute–value pairs within a double set of braces. The MediaWiki software on which Wikipedia operates then parses the document, for which the info-box and other templates are processed by a template processor. This is a template engine which produces a web document and a style sheet used for presentation of the document.
This project aims to **analyze community authored functions that build Wikipedia info-boxes ** and centralizing community authored functions to achieve the Abstract Wikipedia purpose to create and maintain the content of Wikipedia for all languages only once, then render it in the preferred natural language of the reader using Wikilamba functions, which would lead to more coverage and accuracy between articles and also make available more knowledge for readers provided by more contributors. To achieve this, I would;
# Fetch the different community authored functions on the wikis, and determine their usage in articles and how many page views use each community authored function.
# Analyze the similarity between the community authored functions hosted across different projects, highlighting redundant or similar code.
# Determine whether there are segments of code that can be turned into pure functions in the wiki of functions.
==== __**Current State**__
Currently, Wikipedia community authored programming functions are used on different language editions of Wikipedia and require users to go through the tedious processes of searching for the community authored programming function then copy and paste it to their Wikipedia language edition. This process is error-prone, can lead to code duplication, and worse, improvements to functions on one language edition may not ever make their way to other language editions, it would only reflect on the improved function and not automatically across all Wikipedias.
==== __**Why is your proposed solution an improvement to the current solution?**__
With the current existence of redundant code that could cause reduced reliability and maintainability across functions and might affect performance mostly in cases of dead code. This solution which covers analyzing and refactoring duplicate code would improve software metrics, such as lines of code, cyclomatic complexity, and lead to shorter compilation times, lower cognitive load, less human error in the process of copy-pasting code, and fewer dead code.
The proposed solution will;
- Re-structurefactor the community functions into a harmonious whole, and provide more efficient ways of contributing and maintaining Wikipedia functions, and in conjunction with the Wikilamba functions deliver high quality contents globally. As opposed to the current solution with challenges as stated in !!Current State!! section above.
- Reduce the burden on contributors, especially contributors in communities with fewer contributors as they would no longer have to go through the manual processes of finding, copying and pasting functions to provide contents.
- Eliminate divergence of information across Wikipedia content.
- Provide centralized functions for use across Wikipedia contents.
- Provide higher quality, concurrent and accurate articles for more people around the world.
- Help in achieving a significant part of the [[ https://meta.wikimedia.org/wiki/Abstract_Wikipedia/Goals | goal of Abstract Wikipedia ]].
==== __**How will the proposed project benefit Wikimedia projects?**__
This is a work-in-progress project being developed to achieve a Wikipedia in which everyone can share in the sum of all knowledge. This will help ensure high quality concurrent and accurate articles when developedcontent across Wikimedia projects when developed, thereby making available more content to more people around the world regardless of their language background. Functions would be accessed from a concurrent central point by all Wikimedia projects, thereby making available more content to more people around the world regardless of their language backgroundwhich would result in the ease in maintenance of all community-authored functions and accessibility of accurate content.
==== __**Do you see any risks/concerns involved in implementing the planned features?**__
Centralizing community authored functions creates a single point of failure. Instead of having hundreds of independent Wikipedia functions.
Given the number of functions we need to gather information from, the major problem I see has to do with latency.
==== __**About Me**__
I have a National Diploma in Computer Science from Federal Polytechnic Nekede, Owerri, Nigeria.
My journey in tech started during the lock-down when I applied for a training with She Code Africa in April 2020. As a requirement and for the first time, I created a GitHub account and started familiarizing with the environment. In May, 2020, I got accepted into She Code Africa program to learn python for Data science, this was my first try and it was a breaking point for me, because, getting to understand more about tech,listening to people share their success story and writing simple programs piqued my interests and challenged me to go further. This program lasted for 3 months where I went through series of training, attended workshops and webinars. During the course of this program, I was introduced to W.O.S.C.A, a women initiative that introduces Women in Africa to open source. At the time, I could not participate in their activities as I was short of resources. Mid-August, I had gotten resources and kick-started my open source journey, and by August 24th, I made my [[ https://github.com/layer5io/meshery-tanzu-sm/pull/25 | first open source contribution ]] to Layer 5, an organization centered around cloud native computing.
The training was a whole rebranding process for me from which I learnt a lot, and I believe that the knowledge gained from this training, personal projects and other open source contributions will be beneficial to this project, and look forward to getting accepted as an intern for this project.
==== __**Past Experience**__
- **Datasist:** a python package providing fast, quick, and an abstracted interface to popular and frequently used functions or techniques relating to data analysis, visualization, data exploration, feature engineering, Computer, NLP, Deep Learning, modeling, model deployment, here is a [[ https://github.com/risenW/datasist-doc/pull/12 | link ]] to my merged contribution on this project.
- I also wrote a [[ https://github.com/JamBot3000/Hacktober-Challenges/pull/63 | simple calculator using python and tkinter ]] in the JamBot3000 repository on GitHub.
- I participated in a hackathon, for a project on getting information about countries, nearby events and their weather conditions, my contribution to this was writing a script to fetch weather data from an API, and here is a link to my [[ https://github.com/UdokaVrede/MLH-Hackathon/blob/master/weather.py | code ]].
- Contributions I made to some other open source projects can be viewed [[ https://github.com/pulls?q=is%3Apr+author%3AUdokaVrede+archived%3Afalse+is%3Aclosed | here ]].
Asides making open source contributions, I am a python developer and technical writer with experience in HTML, CSS, Python, Git, currently acquiring skills in data science.
Birthdays are one of my favorite days, this motivated me to design a desktop application, “[[ https://github.com/UdokaVrede/CREST | CREST ]]”, that keeps track of birthdays. In designing this application, I made use of python, SQlite3 for the database and the tkinter library for the GUI.
Currently, I am a member of the Eddie Jaoude community, a community that gives people an excellent hand-holding onboarding experience into open source.
I am a member of Open-source Community Africa (OSCA), Facebook Developers Community(DevC) and Andela Learning Community (ALC).
| **PERIOD** | **TASK** |
|---------------------------------- |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **November 1st to November 23rd** | Within this period, I intend to continue contributing to tasks on Wikimedia. I would also continue honing my skills in Python and Data Analysis, my progress on this could be tracked [[ https://github.com/UdokaVrede/DESIDERATA | here ]] |
| **December 1st - December 7th** | Community Bonding period. Get to know more about the community and also implement the [[ https://www.mediawiki.org/wiki/Outreachy/Participants#Community_bonding_period | guidelines for the community bonding period ]] on MediaWiki |
| **December 8th - December 15th** | Get more information on the project and how the tasks are expected to be done. Access the community authored functions. List out community authored functions to be analyzed. Ask questions about the confusing parts of the features to be implemented and get information on any additional task that might be needed. Layout plans and designs for the final implementation and share with my mentor to get feedback |
| **December 16th - January 5th ** | Fetch the different community authored functions on the wikis, that build the info-boxes and other community functions. Identify their usage articles. aAnalyze and determine their usage in articlesthe functions for redundant and dead code. |
| **January, 6th - January, 19th** | Work on the feature to count the page views used by each community authored functions and send in my report for review. |
| **January 20th - February, 9th** | Analyze the similarity between the community authored functions hosted across different projects on Wikipedia. |
|** February, 10th - February, 23rd** | Following the guide on [[ https://en.wikipedia.org/wiki/Help:Creating_a_bot | building Wikipedia bots ]], I intend to build a bot that would highlight redundant or similar code within the community authored functions and returns redundant codes, then seek feedback from my mentor on the next steps to take with my findings if there exists redundant code. |
| **February, 24th - March, 2nd** | Analyze and determine segments of code to be turned into pure functions in the wiki of functions. Finalize, review, organize, get feedback and wrap up the project. |
==== __**Other Deliverables**__
- Blog post on my progress every week
- Regular communication with my mentor(s) and other community members
- Attend program-related meetings.
- Follow any guidelines to get involved with the community and process.
- I will be online on IRC in my working hours (10 am - 6 pm 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.
- I would keep effective communication with my mentor during the internship period.
- Wikimedia contributions
- [x] Fetched all of the source code on English Wikipedia in the [[ https://en.wikipedia.org/wiki/Special:PrefixIndex?prefix=&namespace=828 | Module: "namespace" ]] .
- [x] Generated a summary report.
- [[ https://github.com/UdokaVrede/Wikimedia-Microtask | Wikimedia-Microtask]]
==== __**Other Wikimedia Contributions**__
**Pywikibot**: T265128 - **Replaced all occurrences of “basestring” to “str” and migrated from epytext type hint to annotation type hint.**
- [[ https://gerrit.wikimedia.org/r/c/pywikibot/core/+/634201 | Merged ]]
- [[ https://gerrit.wikimedia.org/r/c/pywikibot/core/+/634216 | Merged ]]
- [[ https://gerrit.wikimedia.org/r/c/pywikibot/core/+/634344 | Merged ]]
- [[ https://gerrit.wikimedia.org/r/c/pywikibot/core/+/634348 | Merged ]]
- [[ https://gerrit.wikimedia.org/r/c/pywikibot/core/+/634785 | Merged ]]
- [[ https://gerrit.wikimedia.org/r/c/pywikibot/core/+/634285 | Merged ]]
- [[ https://gerrit.wikimedia.org/r/c/pywikibot/core/+/634351 | Merged ]]
- [[ https://gerrit.wikimedia.org/r/c/pywikibot/core/+/634327 | Merged ]]
- [[ https://gerrit.wikimedia.org/r/c/pywikibot/core/+/634735 | Merged ]]
- [[ https://gerrit.wikimedia.org/r/c/pywikibot/core/+/635380 | Merged ]]
**Pywikibot**: T264721 - **Rewrite scripts using new option handler**.
- [[ https://gerrit.wikimedia.org/r/c/636022pywikibot/core/+/637741 | In progress ]]
- [[ https://gerrit.wikimedia.org/r/c/pywikibot/core/+/636025 | In Progress ]]
- [[ https://gerrit.wikimedia.org/r/c/pywikibot/core/+/636028 | In Progress ]]
==== __**What does making this project happen mean to you?**__
Wikimedia aims to make available content to everyone around the globe. As I anticipate my acceptance to this internship round with this Wikimedia project, contributing to this project, would mean adding my quota to making the available content to people around the world, this would be elating and a rewarding experience for me, knowing I helped create solutions to provide valuable content to people around the world and also to the progress of the Wikimedia vision.
Career-wise, I would be exposed to:
- A well-structured organizational procedure in achieving goals, and different patterns to achieving goals.
- I would also meet and build a formidable network with more experienced software engineers and broaden both my knowledge set and skills.
- It would also accelerate my growth and experience in the technology industry.