Google Summer of Code/2017

About
Wikimedia has been accepted as a mentoring organization for the Google Summer of Code 2017.

All major projects of Wikimedia are developed with help from contributors from all around the world using MediaWiki. MediaWiki is the software that powers Wikipedia, its sister projects and thousands of wikis all over the world. MediaWiki runs on most operating systems, is written in PHP, primarily uses the MySQL and MariaDB database servers and uses jQuery as the client JavaScript library.

Confused about the differences between MediaWiki, Wikimedia, Wikipedia and Wiki? Figure them out here.

To learn about the full program timeline, visit the official website.

Recommended Next Steps

 * 1) Read the GSOC manual for students and develop your understanding of the various stages of the program.
 * 2) In the context of an outreach program with Wikimedia, learn how to have a successful project.
 * 3) Get a brief overview of projects available under Project Ideas section on this page. Choose a project that you really like and best fits your skill set. Express your interest in working on the project by commenting on the corresponding task on Phabricator. Post in the task comments, ask intelligent and explicit questions ("Could you tell me more about this?" is a bad example), do your research thoroughly, don't expect spoon-feeding. That's the recipe for a perfect intern!
 * 4) To contribute to the MediaWiki development, learn some basic skills required here.
 * 5) Read some really good proposals that were accepted for the previous round:
 * 6) * https://phabricator.wikimedia.org/T148287
 * 7) * https://phabricator.wikimedia.org/T147727
 * 8) * https://phabricator.wikimedia.org/T148074
 * 9) Submit your proposal on Wikimedia's Phabricator by following the instructions on our organization pageon the Google's program site. Make sure that you upload a copy of your proposal on the Google's program site as well in whatever format it's expected of you, include in it the link to your public proposal on Phabricator.
 * 10) If you would like to work on your own project idea, communicate with relevant developers first.

Provide some love to the quiz extension
The Quiz extension was created by a volunteer and is currently installed on several WMF projects, such as Wikiversity. However, it is not under active development and there are a number of reported bugs as well as requested features. There are a number of tasks that should be done to improve the extension: Getting Started
 * Import all the bugs reported on the wiki page to the phabricator board. Here is an example.
 * Re-check and triage all of the old bugs
 * Fix any high priority bugs
 * Implement new desired features, for example T148613

Install mediawiki locally. It is easiest (often) to use vagrant for this. Quiz is not available as a role in vagrant, so follow these directions to manually add lines to LocalSettings.php in vagrant, and include the line require_once("$IP/extensions/Quiz/Quiz.php"); You can test that the extension is working by adding a sample quiz to your test wiki in wikitext. The quiz syntax is well documented here.

You can find the quiz extension in the vagrant repository by navigating to mediawiki/extensions/Quiz. If you haven't already, you will need to set up git, gerrit, and git-review, and install a Gerrit hook to begin submitting commits to the Quiz extension.

Skills Required PHP

Tags MediaWiki-extensions-quiz

Link https://phabricator.wikimedia.org/T148969

Mentors Marielle Volz, Sam Reed

Localize one or more major WMF software products related to new editor retention to hu.wikipedia
Like many other language versions, Hungarian Wikipedia is in a decline, driven by the inability to attract new editors. The Wikimedia Foundation and the movement produced various software to address that issue, but a significant part of that did not reach local communities because the last-mile effort of localization did not happen. ("Localization" is used in a wide sense here, including software localization on translatewiki.net, but also writing local documentation, adapting local gadgets, advertize new features to editors etc.). The primary goal of this project would be to improve that situation by improving the localization of some major software products. The secondary goal is to make such localization easier for other wikis easier by documenting the process and its learnings. The exact selection of software features is up for discussion and might depend on the candidate's skills and interests; some suggestions: There is rough consensus for most of these changes (see here for some past discussion).
 * VisualEditor: finish interface translation, translate and adapt documentation, identify most used templates and add TemplateData (possibly write software tool for converting hu.wikipedia's old template documentation system), enable Citoid, write Zotero plugins for major Hungarian information sources, convert the old CharInsert-based character map, make sure all custom edit buttons/tools for which it makes sense are ported, review gadgets on large wikis and import the most useful ones, update wiki help pages, popularize VisualEditor (especially amongst mentors) and forward feedback to Phabricator
 * Flow: finish interface translation, translate and adapt documentation, organize and set up a trial (see T119365), collect feedback, maybe help with adapting local bots
 * ORES: organize a workforce to finish the "damaging" campaign and possibly do other campaigns; if really ambitious, modify FlaggedRevs to use ORES scores for auto-reviewing
 * build a local version of the teahouse

Skills Required Tags Localization
 * Has to speak Hungarian
 * Community Engagement (ideally some level of familiarity with the Hungarian editor community)
 * Coding skills: Javascript would be the most useful; Python (esp. Pywikibot), Lua, PHP, MediaWiki templating skills could also be put to good use. Coding skills are optional - it's also possible to find enough work for an Outreachy-sized project by only picking subtasks which require no programming.

Link https://phabricator.wikimedia.org/T147618

Mentors Gergő Tisza

Allow Programs & Events Dashboard to make automatic edits on connected wikis
The Programs & Events Dashboard — outreachdashboard.wmflabs.org — supports coordinated editing programs, like edit-a-thons and the Wikipedia Education Program — across many languages and Wikimedia projects. The Wiki Education Foundation Dashboard — dashboard.wikiedu.org — uses OAuth to make automatic edits on English Wikipedia, adding templates to user pages and article talk pages as well as creating and updating mirrored wiki versions of each course page. For example: https://en.wikipedia.org/wiki/Wikipedia:Wiki_Ed/University_of_Guelph/Pet_Nutrition_%28Fall_2016%29

These wiki editing features would be useful for Programs & Events Dashboard as well, especially for Wikipedia Education Programs that want to move from deprecated EducationProgram extension to the dashboard as the basis for organizing Wikipedia classroom projects. To do that, we'll need to extend the dashboard system to: Resources Skills Required Text processing / Regular expressions, Mediawiki markup and templates, Ruby on Rails, Object-oriented design, usage of the Mediawiki API
 * Enable wiki edits on a per-wiki basis
 * Design a standard form for working with templates on a per-wiki basis
 * Identifying which types of edits can be applied to any wiki and which can't
 * Design a workflow for enabling wiki edits on new wikis
 * Setup a development environment: https://github.com/WikiEducationFoundation/WikiEduDashboard/blob/master/docs/setup.md
 * Talk with us: #wikimedia-ed on Freenode IRC
 * Some possible micro-contributions: https://github.com/WikiEducationFoundation/WikiEduDashboard/issues?q=is%3Aissue+is%3Aopen+label%3A%22newcomer+friendly%22

Tags Education Program Dashboard

Link https://phabricator.wikimedia.org/T158678

Mentors Ragesoss, Capt_Swing

Add automatic article feedback feature to Wiki Ed Dashboard / Programs & Events Dashboard
The Wiki Ed Dashboard / Programs & Events Dashboard is a Ruby on Rails + Javascript application that helps people organize groups of newcomers to contribute to Wikipedia. Wikimedia's artificial intelligence projects, specifically ORES (Objective Revision Evaluation Service), have the potential to be used to provide specific useful feedback to newcomers about how they can improve existing Wikipedia articles or article drafts they are working on.

Here's an example of the data we have available for every revision in the history of an article: https://ores.wikimedia.org/v2/scores/enwiki/wp10/26734?features

Let's try this out and see if it can be turned into a useful tool for newcomers: Resources Skills Required Javascript, Ruby on Rails, Object-oriented design, User interface design, Mediawiki markup, Wikipedia editing experience, Machine learning (to understand, and possibly help improve or identify areas for improvement in, ORES)
 * Use ORES data imported into the Dashboard to identify specific aspects of articles that can be improved.
 * Create messages explaining to users how to improve their articles
 * Design and implement a user interface for showing the messages
 * Measure the effectiveness of these messages in prompting users to improve their articles
 * Conduct user tests to identify ways of improving the feedback, and improve it
 * Setup a development environment: https://github.com/WikiEducationFoundation/WikiEduDashboard/blob/master/docs/setup.md
 * Talk with us: #wikimedia-ed on Freenode IRC
 * Some possible micro-contributions: [1 https://github.com/WikiEducationFoundation/WikiEduDashboard/issues?q=is%3Aissue+is%3Aopen+label%3A%22newcomer+friendly%22]

Tags Education Program Dashboard

Link https://phabricator.wikimedia.org/T158679

Mentors Ragesoss, Capt_Swing

Add a spreadsheet interface for modifying multiple pages to the Page Forms extension
The Page Forms extension allows for editing only one page at a time. Normally this is fine, but in some cases an administrator or "power user" may want to change many pages at the same time - for instance, if there has been a change to the data structure, like a parameter/field getting added to a template.

What is needed is a new "special page", defined by Page Forms, that displays a spreadsheet interface for editing many pages, where each row represents a single template call and each column represents a template parameter, i.e. form field. There may be more than one call to a template on the same page, so this interface would need to handle that case as well. This interface should most likely be implemented using the jsGrid library, which thankfully is already in use by Page Forms for other purposes: http://js-grid.com

The steps of such a project may look something like: Skills Required PHP, JavaScript
 * Make a basic "minimum viable product" special page that lets the user edit all the calls to any specific template, using a spreadsheet interface, with a text entry for each value.
 * Add support for pagination, for large data sets.
 * Add support for adding new pages via the same interface.
 * Use other Page Forms code to get the ideal input type (text, dropdown, checkbox etc.) for each template parameter, and display that in the spreadsheet.
 * Add support for additional input types that jsGrid does not handle by default - the most important being dates and two autocompletion-based inputs, "combobox" and "tokens". This part should be a fun challenge for anyone who enjoys working with JavaScript and jQuery.
 * Optionally provide support for renaming pages from within the interface.

Tags MediaWiki-extensions-Page_Forms

Link https://phabricator.wikimedia.org/T63989

Mentors Yaron_Koren, Nischay Nahata

Add a "hierarchy" type to the Cargo extension
The Cargo extension lets you declare a certain field as having "allowed values" (like "Blue, Red, Yellow"), but it doesn't allow for defining a field as holding a hierarchy of values. An example would be a field called "Topic", which can hold both major topics and minor sub-topics as values. The steps of such a project may look something like:
 * Add support for declaring hierarchy fields
 * Add support for querying hierarchy fields, using a new Cargo keyword, "WITHIN" (as in "where=City WITHIN 'Asia'"). This would need to work with both single-value fields and fields that hold multiple values.
 * Add support for such fields within Cargo's Special:Drilldown interface - a line there might look like:  Fruits (23) * Vegetables (30) ("Vegetables" only (3) * Root vegetables (15) ("Root vegetables" only (1) * Carrots (12) * Turnips (2) ) * Peppers (12) )

Skills Required PHP, SQL
 * Add support for hierarchy fields in the Page Forms extension - so that such fields automatically get the right input type ("tree"), with the right values filled in
 * Also make hierarchy fields easy to create in Page Forms' helper pages, like Special:CreateTemplate and Special:CreateClass

Tags MediaWiki-extensions-Cargo

Link https://phabricator.wikimedia.org/T161034

Mentors Yaron_Koren, Nischay Nahata

Single image batch upload
Currently when somebody does a batch upload (uploading a lot of images which were released by an archive/museum (GLAM)) all images get uploaded and lots of those might not be used or not that useful. However uploading released images one by one wastes a lot of time. A solution to this would be to provide the metadata-mapping which makes an upload possible and a framework which using these mappings can be used to upload a single (or a small subset) of images from a GLAM. In the best final version this would allow a GLAM to provide an "upload to Wikimedia Commons" button on their website. The task at hand here is to build this framework. For each GLAM a separate metadata mapping is needed, you don't have to make these: I will provide/create such a mapping for a Dutch archive (Nationaal Archief) or if needed from an English archive. However we'll have to discuss a good way these mappings can be added/maintained. The most suitable place for this to land is likely https://tools.wmflabs.org/. For authentication we could make use of OAuth. More thorough description of the idea can be found at:  https://commons.wikimedia.org/wiki/User:Basvb/Ideas/Single_Image_Batch_Upload

Skills Required Combination of frontend and backend (preferrably python backend)

Tags Wikimedia Commons

Link https://phabricator.wikimedia.org/T138464

Mentors Basvb, TBD

Improvements to ProofreadPage Extension and Wikisource
Make several bugs correction and improvement to Wikisource.

Skills Required PHP, Javascript

Tags Wikisource

Link https://phabricator.wikimedia.org/T128840

Mentors Yann

Implement a feature for MediaWiki's Notifications tool: Make it possible for a logged-in user to get a reminder of an article after a few days
MediaWiki’s Notifications is an engagement tool for Wikimedia and MediaWiki sites to inform users about new activity in a unified way. It provides notifications to users of various events related to their account, including new talk page messages, edit reverts, mentions, or links. The goal of the project proposed is to add a functionality in the Notifications tool that allows logged-in users to get a reminder of an article after a few days. The Notifications project is being developed by the Wikimedia Foundation’s Collaboration team.

Skills Required PHP, Javascript, and familiarity with MediaWiki in general

Tags Notifications

Link https://phabricator.wikimedia.org/T2582

Mentors Moriel Schottlender, Matthew Flaschen

Build a similar to @NYPLEmoji bot for Commons images
People who tweet an emoji to @NYPLEmoji get a similar image from the collections in response. The code for the project lives here: https://github.com/lolibrarian/NYPL-Emoji-Bot. The proposed project is about creating a similar bot for Commons images. It will introduce a lot of people to the Commons collection and because it uses emoji, not words, it would translate for mobile/desktop users worldwide.

Skills Required Analysis, Basic software architecture, development

Tags Commons

Link https://phabricator.wikimedia.org/T143593

Mentors Dereckson, Ariel Glenn

Tools for volunteers to make it easier to improve the Wikispeech lexicon
Wikispeech will have a crowdsourcing part so that volunteers can help improve the text-to-speech experience. Volunteers will be able to improve the lexicon in a few different ways (see M197). For the volunteer that want to make the most useful contributions (with limited time on their hands) we see a need to help with prioritizing what to focus on.

One great tool would be an option to highlight what words would be most valuable to add in the lexicon - order to improve the text-to-speech experience for a specific article (e.g. the name of the place the article is about). Then the volunteer could quickly add a few words to the lexicon through the Wikispeech editor and a valuable contribution has been made.

Skills Required Analysis, basic software architecture, development

Tags Wikispeech

Link https://phabricator.wikimedia.org/T161310

Mentors Sebastian Berlin (WMSE), André Costa (WMSE)

Some other ideas
Look through the possible-tech-projects and '' Wishlist 11-30 (needs owner)" and "Wishlist 31-50 (needs owner)" column on the Community-Wishlist-Survey-2016 workboard. Some of them might not be ready to be mentored (for example missing discussion or mentors), but if you show your interest in working on those projects, it's likely that someone from the community would be willing to support you!

Contact

 * Trouble connecting with mentors of projects you are interested in applying to? Got application or program-specific question, come and talk to us in the IRC channel #wikimedia-devrel or reach out to the organization admins Srishti Sethi ssethi[at]wikimedia[dot]org or Anna Liao (aliao22[at]gmail[dot]com).
 * For a specific project-related question, either communicate with mentors on the corresponding task in Phabricator or reach out to them in their project's IRC channel.
 * Want to participate in a group discussion with prospective candidates? Join us here https://phabricator.wikimedia.org/Z514
 * Mailing list for an overall Wikimedia projects specific discussion: wikitech-l@undefinedlists.wikimedia.org.