Name: Jerop Brenda
IRC nickname on Freenode: brendajerop
Web Profile: https://brendajerop.github.io
Typical working hours: 8:00 AM to 7:00 PM EAT (UTC+3)
The MediaWiki Action API is a REST API that provides access to wiki features like creating an account, logging in, creating and editing a page, searching for a title and many more. A complete description is available [[ https://www.mediawiki.org/wiki/API:Tutorial | here ]].
This project aims to improve the documentation of the API by re-writing it to follow [[ https://www.mediawiki.org/wiki/API:Documentation_template | this ]] template, adding code samples to demonstrate the use of the API modules, and creating a demo app based on some of the modules. A complete description of this project is available [[ https://phabricator.wikimedia.org/T215682 | here ]].
By following a template, consistency will be achieved in the documentation. This provides a uniform way to give information hence making the use of the API more intuitive to new users. It also makes it easier for new contributors to understand how to edit and add new information.
Adding code samples and creating a demo app based on the modules will provide a practical means of understanding the API. This is especially important to new users and to users whom the documentation has not been translated into their language.
= Possible Mentors
Srishti Sethi @srishakatux, Sarah R. Rodlund @srodlund.
!!**Before interns are announced: Today to May 6**!!
- Complete the tasks which are a work in progress and work on new tasks as I go through the tutorials at [[ https://www.mediawiki.org/wiki/API:Main_page | API:Main_page ]] in order to improve my Python, Flask, HTML and CSS skills.
!!**Before the internship starts: May 6 to May 20**!!
- Create a spreadsheet to analyse and document the state of the 50th to the 70th most-viewed pages as shown in [[ https://tools.wmflabs.org/massviews/?platform=all-access&agent=user&source=category&target=https%3A%2F%2Fmediawiki.org%2Fwiki%2FCategory%3AMediaWiki_action_API&range=latest-20&subjectpage=0&subcategories=1&sort=views&direction=1&view=list | Massviews Analysis ]] in order to determine the amount of work needed in each page and the order of the pages to be edited.
- Refine my ideas for the demo app and document my progress [[ https://www.mediawiki.org/wiki/User:Jeropbrenda/Apps | here ]].
!!**May 20 to July 22 (9 weeks)**!!
- Send pull requests for two to three modules per week and improve their respective documentation pages.
- Finalize on demo app idea and mockups.
!!**July 22 to August 11**!!
- Create and test demo app.
!!**August 12 to August 20**!!
- Write a tutorial for the demo app and include it in the tutorials section of [[ https://www.mediawiki.org/wiki/API:Main_page | API:Main_page ]].
==2. Demo app
My idea for the demo app is an app that fetches the day’s holidays and observances from Wikipedia as shown [[https://en.wikipedia.org/wiki/October_31#Holidays_and_observances | here ]]. This idea and its implementation will be subject to change as seen fit by the project mentors.
- Fetch the day’s holidays and observances using `API:Parse` and list them.
- Allow searching for holidays by date.
- Users can log in to add a new holiday. This will make use of `API:Assert` to check whether the user is logged in. If not, use `API:Login` to log the user in then use `API:Edit` to add a new holiday.
- I will use Python, Flask, HTML, CSS and Jinja templating.
- The app will follow Wikimedia’s design principles and will assume a mobile layout in order to utilize space.
- An interactive mock-up of the app is available [[ https://marvelapp.com/5ci723b | here ]] and mockup screens are available [[ https://www.dropbox.com/sh/2xi8ksmw46v8n1p/AAC5_ocahywKuAwm7nMp7tpPa?dl=0| here ]].
- I also created a similar but basic app for proof of concept [[ https://holidaystoday.herokuapp.com| here ]].
- I will communicate my progress to my mentor and ask for help on project-related issues through Zulip.
- I will ask for help on API-related issues at the Wikimedia Developer support channel.
- I will document detailed progress through weekly blog posts.
- I will also update my progress to T198916.
- I will create a separate branch for each module and open a pull request on GitHub for review. After the pull request is merged, I’ll add the code sample to the documentation.
- For the documentation, I will create a page in my sandbox corresponding the module I’m working on. After the changes are approved, I will integrate them to the mainspace.
- I joined the University of Nairobi, Kenya, in 2015 to pursue Electrical and Electronic Engineering but took a year off in September 2018. On my first holiday from college, I attended a boot camp where I learnt Java and got introduced to Android Programming. On completion, I became a part of NaiCode, a community that teaches programming to high school students in Kenya.
I later got selected for the Google Africa Scholarship Program to learn Intermediate Android Development. During that period, I also served as a community mentor to guide the beginner students through their Android Development course. My certificates for participation as a student and as a mentor are available [[ https://www.dropbox.com/s/w5yh1d7to5oowgz/androidintermediate.pdf?dl=0 | here ]] and [[ https://www.dropbox.com/s/igs3u0m8j2r86so/alcMentorCert.pdf?dl=0 | here ]] respectively.
In August 2018, I applied to Y Combinator’s Startup School and luckily, all the companies that applied were accepted for that cohort. My Startup School profile is available [[ https://www.startupschool.org/companies/hidecontacts | here ]].
- **How did you hear about this program?** I learnt about this program through Twitter, on a previous participant’s timeline.
- **Will you have any other time commitments, such as school work, another job, planned vacation, etc, during the duration of the program?** No, I will not have any other time commitments during the duration of the program.
- **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 not planning to apply for Google Summer of Code.
- **What does making this project happen mean to you?** As an avid user of FOSS(I use Linux, Firefox, LibreOffice and VLC), this project provides a platform through which I can give back to FOSS because most open-source organisations use MediaWiki-powered wikis. It will also grant me a good entry point into open-source contribution.
This project will also boost my skills, improve my confidence and shape me as a programmer. This is because I will be working in a mentored environment with a structured workflow where proper code documentation, organization, testing and coding styles need to be followed. Also, I love both writing and programming, and this project is a bridge between the two.
==1. Contributions to Wikimedia
- **API:Querypage**: Improved the documentation and wrote sample code to demostrate its use in querying uncategorized pages.
- [[ https://www.mediawiki.org/wiki/API:Querypage | Documentation ]]: `Approved`
- [[ https://github.com/wikimedia/MediaWiki-Action-API-Code-Samples/pull/61 | Sample code ]]: `Merged`
- **API:RecentChanges**: Improved the documentation and wrote sample code to demostrate its use in fetching the three most recent changes with their sizes and flags.
- [[ https://www.mediawiki.org/wiki/API:RecentChanges | Documentation ]]: `Approved`
- [[ https://github.com/wikimedia/MediaWiki-Action-API-Code-Samples/pull/60 | Sample code ]]: `Merged`
- **API:Links**: Wrote sample code to demonstrate its use in fetching missing links from a page. I also added this example to the documentation.
- [[ https://www.mediawiki.org/wiki/API:Links#Example_2:_Fetch_missing_links | Documentation ]]: `Approved`
- [[ https://github.com/wikimedia/MediaWiki-Action-API-Code-Samples/pull/52 | Sample code ]]: `Merged`
- [[ https://www.mediawiki.org/wiki/Help:VisualEditor/User_guide/Citations-Full | Edited and completed a guide on how to add citations to a page if the Citoid service has been configured on a wiki ]]: T108980 `Work in progress, approved`. While working on this page, I learnt about Wikimedia’s guide to technical documentation, which I followed in order to give structure, clarity and consistency to the guide. I also got to learn how to work with translatable pages and learnt about concepts like qqx. Working on the guide also improved my wiki markup skills.
- [[ https://gerrit.wikimedia.org/r/496115 | Corrected the auto-generated documentation for parameter `headhtml` in module `parse` ]]: T139567 `Approved by one reviewer on Gerrit`. I edited the autogenerated documentation to reflect what is returned by action=parse&prop=headhtml.
- [[ https://gerrit.wikimedia.org/r/#/c/497132/ | Included links of the corresponding API module in Pywikibot methods. ]]: T100521 `Merged`. I modified the docstring of all APISite methods in site.py which are thin wrappers around a MediaWiki API module to include a link to the corresponding API documentation.
- [[ https://gerrit.wikimedia.org/r/496792 | Modified the auto-generated documentation to include information about hidden parameters which have been revision-deleted ]]: T186573 `Under review`. Working on this task gave me a deeper understanding of the MediaWiki API because I had to check the code in order to see which modules were affected if some parts of a revision are hidden. This is a work in progress but I have completed modifying the documentation of modules:
- Wrote and modified documentation for Commons Templates: T120366. Working on this task gave me a deeper understanding of templates, how they work and how to use them. It also improved my wiki markup skills. This is a work in progress but the documentation which I have completed are for templates:
- [[ https://commons.wikimedia.org/w/index.php?title=User:Jeropbrenda/Sandox/Template:IsNum | Template:IsNum ]]
===!!Commons Android App!!
- [[ https://github.com/commons-app/apps-android-commons/pull/2556 | Added code to automatically close the Floating Action Button. ]]: `Merged`. I added an enhancement to automatically close the Floating Action Button in the upload activity after a user has uploaded an image.
- [[ https://github.com/commons-app/apps-android-commons/pull/2551 | Added code to allow easy access to the pictures that were uploaded through the Android app ]]: `Merged`. I added a new feature to include tabs that display featured images and images uploaded through the Android app.
==2. Contribution to open source
===!!The Mifos Initiative!!
- [[ https://github.com/openMF/android-client/pull/1032 | Added support for Swahili to Mifos Android Client ]]: `Merged`
- [[ https://github.com/openMF/android-client/pull/1028 | Added code to Mifos Android Client to remove irrelevant space in an accordion ]]: `Under Review`
==3. Other projects
- [[ https://github.com/brendajerop/Holidays-Viewer | Holidays Viewer ]]- A web-app that fetches the current day’s holidays and observances from Wikipedia using API:Parse and lists them. I created this app in order to practise building the demo app and to refresh my Python, Flask, HTML and CSS skills. While working on the app, I learnt about and followed Wikimedia’s design principles in regards to colours, typography and visual style.
- [[ https://github.com/brendajerop/hogwarts | A simple school system app ]]- A Flask CRUD web app that allows creation, editing and deletion of student data. This app was created as part of a group assignment at school. While working on this app, I got introduced to Python, Flask, HTML, CSS and SQL.
- [[ https://github.com/brendajerop/django-intro | Simple blog ]]-I created a simple blog while learning how to use Django.
- [[ https://github.com/brendajerop/github-repos | Github-Repos ]]- An app that fetches a users repositories using the GitHub API. Working on this app helped me understand how APIs work, specifically REST APIs.
- [[ https://play.google.com/store/apps/details?id=nothingapps.com.secondarycontacts | HideContacts ]]-A contacts app that can’t be read by other apps. It doesn’t save contacts in vcf format so other apps like Whatsapp and Facebook don’t recognize it as a contacts app and hence they can’t read contacts from it. This improves privacy. I created this app after completing YC’s Startup School program where I learnt about concepts like Key Performance Indicators and Lean Software Development. The app currently has 1000+ users.
- [[https://play.google.com/store/apps/details?id=com.kaizen.orodha | Orodha ]]- An app that simplifies the process of creating an exam merit list for Kenyan teachers who don’t have access to computers.
- [[ https://github.com/brendajerop/tic-tac-toe| TicTacToe ]]- An Android version of Tic Tac Toe. I created this as a capstone project for an Android development course.
- [[ https://github.com/brendajerop/goodnight| Goodnight ]]- An android app to auto-send a goodnight message to specific people at a specific time
I created these apps during a hackathon to demonstrate the usage of the Java GUI.
- [[ https://github.com/brendajerop/screensaver | Screensaver ]]- An app that creates wallpapers and screensavers by drawing spirographs on the screen.
- [[ https://github.com/brendajerop/paint-app | Paint app ]]- A painting app that allows you to paint on a screen by dragging the mouse. You can also change the colour of the pen, the background colour and the thickness of the pen.
- [[ https://github.com/brendajerop/touch-type-practice | Touch-type Practice ]]- An app that allows you to practise touch-typing by giving you a word to type against a set time limit. It has a virtual keyboard on the screen that highlights any key pressed.
- [[ https://github.com/brendajerop/animated-card | Animated-card ]]- An animated get-well-soon card with background music.
- [[https://github.com/brendajerop/medical-diagnosis | Medical-Diagnosis ]]- An app to diagnose lifestyle diseases using Matlab’s Neural Network Toolbox. I created this app as a requirement of a class assignment.