Google Code-in/2014

Google Code-In is a contest to introduce pre-university students (ages 13-17) to the many kinds of contributions that make free and open source software (FOSS) development possible. Students must complete tasks, one at a time. It is sponsored and run by Google. The Wikimedia Foundation has participated since 2013.

The Google Code-in 2014 contest runs from December 01, 2014 to January 19, 2015 (see the full timeline).

Instructions for GCI students
These instructions are common to all the GCI tasks. Each category of tasks has further instructions. There is also general information available by Google.

Suggested reading
If you choose to work on a task that requires writing or changing code, you might want to at least skim these pages first to avoid unnecessary setbacks during the review process:
 * The code of MediaWiki, its extensions, and Wikimedia's server configuration is located in Git repositories. You are expected to provide your work (patches etc.) in both Google Melange and Wikimedia Gerrit for review. See Developer access and Gerrit tutorial for information about how to download our code, test it and start submitting patches. Only if you have problems with Gerrit, providing your work in the corresponding task in Wikimedia Phabricator or Wikimedia Bugzilla is an acceptable workaround.
 * Coding conventions and any subpages relevant to your task (PHP, JavaScript, Python, …)
 * Following the Commit message guidelines, especially the Example section at the bottom, will automatically add a notification about your patch to the corresponding task in Phabricator or Bugzilla. Hence there is no need anymore to add a "Please review" comment in the report.
 * Amending a change. Don't create a new Gerrit changeset to fix your previous one!
 * Getting code reviews. Find and add people as potential reviewers of your patch.

Feedback, questions and support
Each GCI task specifies a public community channel for related questions and comments that might be more efficient than Google Melange. Identifying yourself as a GCI student may help you getting more/faster help from other contributors in addition to your mentor(s).
 * Sometimes the channel is a bug report. See Phabricator/Bugzilla (except for Kiwix tasks which use Sourceforge instead). In the upper right corner of a bug report you can see the product and component that the problem is located in. This provides you a hint about the Git repository that the code is located in, and about the development team which you could contact if you want to discuss it in a "broader" way (as comments in bug reports should refer to the specific problem described in the report only).
 * Sometimes the channel is a wiki discussion page. See Help:Talk pages.
 * You are expected to do some basic research yourself first: Look at the code, try to get some understanding what it is supposed to do, and try to find the probable place(s) where you need to make changes in order to fix the bug.
 * If you have general questions about infrastructure, the software architecture or workflows which are not tied to the specific bug that you want to work on, use generic channels like IRC, mailing lists, or wiki discussion pages. For example, if you have a problem with Gerrit, the Gerrit discussion page could be a good place to ask.
 * If you have a specific question about the bug itself, comment in the corresponding Phabricator or Bugzilla report. "What do I have to do to fix this bug?" is not a good question to start with: The more specific your questions are, the more likely somebody can answer them quickly. If you have no idea at all how to fix the bug, maybe that bug is not (yet) for you - please consider finding an easier one first.
 * When asking, elaborate what you have tried and found out already, so others can help at the right level. Try to be specific - for example, copy and paste your commands and their output (if not too long) instead of paraphrasing in your own words. This avoids misunderstandings.
 * Avoid private email or support requests in our social media channels.
 * Please be patient when seeking input and comments. On IRC, don't ask to ask, just ask: most questions can be answered by other community members too if you ask on an IRC channel. If nobody answers, please ask on the bug report or wiki page related to the problem; don't just drop the question.
 * Learn more at Communication.

Communicate soon and often
If your task has a related bug report in Phabricator or Bugzilla, comment on the report that you have started the work and request to have it assigned to you.

If your task requires the creation of wiki pages, create them to draft your text from scratch, and communicate in the Google Melange task the URL of the new page.

By communicating early you will get more attention, feedback and help, not only from your mentor(s) but perhaps from other community members as well.

Once you have started, feel free sharing your progress (or lack of it) as you accomplish little milestones or you get stuck in a problem. As long as you communicate through bug reports or discussion wiki pages you don't have to worry about spamming people: those who follow these bug reports and wiki pages are interested in your work.

By communicating early you will get more attention, feedback and help from community members.

Contacting Wikimedia mentors

 * Please be patient when seeking actions from mentors. Mentors are humans who eventually leave their laptops to sleep, work, study... Also they might be in different timezones than you. It could take your mentor(s) up to 36 hours to receive a review of the work that you have submitted. You should be reasonably patient and should not ask for a review of your work after only a few hours of waiting. Google Code-In is about the quality of your contributions and learning how FOSS development works, not about the number of tasks that you have worked on.
 * On IRC, don't ask to ask, just ask: most questions can be answered by other community members too if you ask on a channel. If you can't find your mentors NOW and nobody answers, please ask on the bug report or wiki page related to your task, don't just drop the question. Org admins might be also able to help.

Mentors' corner
The following section is only interesting for mentors of GCI tasks.

First things first:
 * 1) Before starting creating tasks, please contribute to the common boilerplate text below under "Common instructions for tasks".
 * 2) Watch this page for more instructions, or ask for them.
 * 3) After November 12th, register as an official mentor in Google's Melange.
 * 4) Create your proposed tasks in Google Melange.

Become a Wikimedia GCI mentor
Register as mentor in Google Melange quickly after November 12th, and then request a connection with Wikimedia through "My Dashboard". Quim and Andre will receive a notification and will accept you. From that point you will be able to create further tasks, add yourself to tasks, add other mentors to your tasks in Melange.

Mentors can add tasks at any time, also after GCI has started. Usually this is what happens when students are finishing tasks, they have already learned about a specific area, and they want more tasks related to it.

Requirements of a task
If there is common text that should be included in any of your tasks, add it to the basic boilerplate section "Common instructions for tasks" below!


 * Tasks are supposed to take 2-3 hours to an experienced contributor. It is fine if the first task takes even 2-3 days to a student because they must understand many concepts and setup their environment first. And it is also ok if students specialize in a type of task, so every new task takes less time to complete until they are also able to complete them in a couple of hours.
 * "Beginner tasks" are supposed to take less than 30 minutes to an experienced contributor. They are supposed to be "less technical in nature".
 * Tasks are self-contained. Students must be able to complete it without much knowledge of the context, or the background.
 * Tasks should preferably have two mentors. Mentors are supposed to reply and review student contributions within 36 hours (keep in mind weekends and christmas holidays). Org admins are happy to help out but if you know that you will not be available in a certain timeframe, please reach out to co-workers if they could help review.

Bugs which have been made into GCI tasks should have "gci2014" added to their Whiteboard field to make it easy to track them. You can add the URL to the task definition in a comment or URL field.
 * A list of Bugzilla tasks which were already GCI candidates in 2013: ALL whiteboard:gci2014
 * A list of potential Bugzilla tasks fitting for GCI: MediaWiki and extensions, +keyword:easy, -whiteboard:gci2014, no patches pending ("GCI candidate bugs" saved search).
 * If you are afraid that a proposed bug in Phabricator/Bugzilla will get fixed before Google Code-In starts you could consider adding a comment on the corresponding Phabricator/Bugzilla ticket like "Please avoid working on this if not urgent - this task has been proposed as a Google Code-In 2014 task".

How to propose tasks
Please add new tasks directly in Google Melange after registering, instead of using this wikipage.

Template for tasks
When adding new task proposals in Google Melange, you will have to provide the following information:
 * Task title (as a section title on this wikipage). You might want to mention your project name in the title.
 * Detailed task description with full URL link to a corresponding bug report and links to any information that could be helpful and to important resources. Mention skills that could be helpful or even required for students - this helps both sides to avoid misunderstandings and wrong expectations. Note that should always be added to tasks.
 * Hours (integer) to complete the task. Keep in mind students' real life and be generous.
 * One or two mentor(s) available for this task. The mentor(s) must have agreed on mentoring and also be registered in Melange.
 * Tags: Any arbitrary keywords related to the task which can be searched for, e.g. the programming language.
 * Beginner task? Yes or No.

Workflow
When a student submits a task for review, and you find it is not complete yet, you must change the status of the task to "Needs work". Then you can get back to the student with details to finish the task at Gerrit / Phabricator / wherever you have agreed. The first time you do this in the task you should also comment in Melange where your feedback is located, just in case.

Proposed tasks
Please add new tasks directly in Google Melange after registering, instead of using this wikipage.

The tasks listed on this wikipage will be imported into Google Melange well before December 01, since that is the interface that students and mentors will use.

Category: Code
Tasks related to writing or refactoring code. (Please always follow the "Template for tasks" above!)

Improve the internationalisation/localisation of MediaWiki (recurring task)
(recurring task; create at least 5 times, up to ~60 times), perhaps cloning [1])

Upgrade from long-deprecated i18n functions (recurring task)
(recurring task; create at least 5 times, up to ~15 times)


 * Help improve the internationalisation of MediaWiki. The corresponding bug report is https://bugzilla.wikimedia.org/show_bug.cgi?id=68750 . Detailed steps:
 * Keep https://www.mediawiki.org/wiki/Localisation#Internationalization_hints in mind, study the messages API manual at https://www.mediawiki.org/wiki/Manual:Messages_API for PHP until you fully understand the conversion table: https://www.mediawiki.org/wiki/Manual:Messages_API#Help_with_replacing_deprecated_wfMsg.2A_functions.
 * Pick 1 extensions/* directory from those mentioned at https://bugzilla.wikimedia.org/show_bug.cgi?id=68750#c0 . Ensure it's not already being worked on at https://gerrit.wikimedia.org/r/#/q/message:wfMsg+project:%255Emediawiki/extensions/.%252B+is:open,n,z.
 * Update the code which uses wfMsg* functions, as explained in the manual linked above; test and submit your patch to gerrit as explained in the general suggested reading material at https://www.mediawiki.org/wiki/Google_Code-in_2014#Suggested_reading.
 * Remember to mention wfMsg* and bug 68750 in the commit message as explained in https://www.mediawiki.org/wiki/Gerrit/Commit_message_guidelines : that will be enough for the mentors to know of your work; this task will be accepted here when one patch is merged.
 * 3 days time
 * Mentor: Federico Leva (Nemo)
 * Tags: i18n, internationalization, internationalisation, l10n, localization, localisation, PHP, language

A better mobile view for editor data for dashiki (https://metrics.wmflabs.org/static/public/dash/)
Dashiki is the platform we are using to display data around edits in Wikipedia and sister projects. The platform itself requires minimal setup and if you have python installed in your computer you can get it running: https://github.com/wikimedia/analytics-dashiki This task consists of adapting the display of dashiki for mobile devices, at this time the display is not so mobile friendly and it is optimized for desktop, details on what the display needs to do in mobile are described on the bug, no new elements need to be created, rather selective hiding of current elements needs to happen. Coding will require CSS/HTML skills.
 * Bug report: https://bugzilla.wikimedia.org/show_bug.cgi?id=73030
 * Hours to complete the task will depend on student knowledge of CSS/HTML but about 2/3 days should be plenty.
 * Mentors: nuria@wikimedia.org
 * Tags: CSS, HTML, Mobile Web, Editor Data
 * Beginner task? Yes

Enhance the BounceHandler extension to differentiate between permanent and temporary bounces effectively
The BounceHandler extension (see https://www.mediawiki.org/wiki/Extension:BounceHandler) is used in MediaWIki to handle its email bounces effectively. It generates a VERP (https://www.mediawiki.org/wiki/VERP) 'Return-Path' address header corresponding to every send email from the Wiki and processes an incoming bounce email to take actions on the failing recipient. The bounce email is HTTP POSTed from the mail server to the extension API, from where the bounce is stripped of its headers and the bounce information is stored in a table. If the number of bounces for a user exceeds a defined limit (say 3 in a week), the user is email - unconfirmed.

A bounce is an incoming delivery failure notification mail, and there are many points where the delivery can fail, for example: and a lot more. Each case can result in the mailserver currently handling the transaction to originate a bounce message. Actions needs to be taken only against the permanent bounces as those are recipient specific. Incorrect actions taken on a number of temporary bounces (may be due to a network error) can get a lot of users getting un-subscribed.
 * DNS lookup failure (Permanent failure)
 * Network failure (Temporary failure)
 * Remote server could be overloaded (Temporary failure)
 * Remote server might blacklisted wikimedia.org or wiki@wikimedia.org (Temporary failure)
 * Remote server could say example@gmail.com is a bad address (Permanent failure)
 * Remote server could say example@gmail.com is over quota (Temporary failure)

Currently, we have only a check to ensure that a header  exists in https://github.com/wikimedia/mediawiki-extensions-BounceHandler/blob/master/includes/ProcessBounceWithRegex.php#L38 to confirm it to be a permanent bounce. This must be further enhanced to read the failure SMTP codes ( http://www.serversmtp.com/en/smtp-error ) from every bounce email (every bounce has one) and then effectively judge it to be temporary or permanent bounce. This is employed in various advanced bounce handlers and MediaWiki should too have one.

Skills/ Requirements required: Basic / intermediate knowledge in PHP so that you can read through the BounceHandler extension code on https://github.com/wikimedia/mediawiki-extensions-BounceHandler and get an idea how the bounce email is processed by the 'bouncehandler' API. Reading through the entire extension code is not required if you can reach to the regex expression directly and test it on a sample bounce email. Have a basic idea about email, email bounces, SMTP, mail server. What you need to do in a single line:

* Create a PHP regex expression to extract the SMTP code from the bounce email and only call the bounce processing scripts if the bounce is a hard bounce.

Hours: 70

Mentors: Tony Thomas, Jeff Green (?), Legoktm (?)

Tags: MediaWiki extension, BounceHandler

Beginner Task: No

jquery.textSelection: Select sample text, if possible, when is true

 * Description: Fix https://bugzilla.wikimedia.org/show_bug.cgi?id=70764. Please read bug's description and comments to learn what needs to be done.
 * Expected time needed: 4 hours
 * Mentors: Bartosz Dziewoński
 * Tags: JavaScript, jQuery
 * Beginner task? Yes

Display error when user tries to create a circular redirect (self-redirect)

 * Description: Fix https://bugzilla.wikimedia.org/show_bug.cgi?id=27683. Please read bug's description and comments to learn what needs to be done. Also see https://www.mediawiki.org/wiki/Help:Redirects for more information about redirects.
 * Expected time needed: 6 hours
 * Mentors: Bartosz Dziewoński
 * Tags: PHP, HTML, i18n
 * Beginner task? No

Installer: Sidebar group separator should look like in Vector's sidebar

 * Description: Fix https://bugzilla.wikimedia.org/show_bug.cgi?id=37362. Please read bug's description and comments to learn what needs to be done. Also see https://www.mediawiki.org/wiki/Skin:Vector for more information about the Vector skin.
 * Expected time needed: 6 hours
 * Mentors: Bartosz Dziewoński
 * Tags: PHP, HTML, i18n, CSS
 * Beginner task? No

ResourceLoader modules should be using instead of

 * Description: Fix https://bugzilla.wikimedia.org/show_bug.cgi?id=65384. Please read bug's description and comments to learn what needs to be done. Also see https://www.mediawiki.org/wiki/ResourceLoader for more information about ResourceLoader.
 * Expected time needed: 6 hours
 * Mentors: Bartosz Dziewoński
 * Tags: JavaScript
 * Beginner task? No

Hide "(Redirected from …)" notice when printing articles

 * Description: Fix https://bugzilla.wikimedia.org/show_bug.cgi?id=16296. Please read bug's description and comments to learn what needs to be done.
 * Expected time needed: 4 hours
 * Mentors: Bartosz Dziewoński
 * Tags: PHP, HTML, i18n
 * Beginner task? Yes

Rewrite date string internationalization templates in Lua
Translate https://commons.wikimedia.org/wiki/Template:Other_date to Lua and build testcases comparing both versions. Expand ISOdate_extended function in https://commons.wikimedia.org/wiki/Module:Date/sandbox to allow calling of the lua version from that function based on simple English (or language independent) expressions. If successful the result is likely to be called from https://commons.wikimedia.org/wiki/Template:Information and https://commons.wikimedia.org/wiki/Template:Creator and might be used on majority of files on Wikimedia Commons.
 * Hours: 80
 * Mentors: Jarek Tuszynski (Jarekt)
 * Tags: Lua, I18n, internationalization, internationalisation, Template
 * Beginner task? No

Citoid: Add PMID to all citation objects with a DOI using PubMub API
See https://phabricator.wikimedia.org/T1088 for the corresponding bug report. In method addPMID in the file lib/zotero.js, currently the PMID is extracted from the extra field in the citation object. However, the PMID is only found in the extra field when the metadata is being extracted from a link directly from http://www.ncbi.nlm.nih.gov/, but not if a different URL to the paper is used, such as one on the publisher's website. If a citation object contains a DOI, you can use the DOI to look up the PMID and add that to the citation using the PubMed API: http://www.ncbi.nlm.nih.gov/pmc/tools/id-converter-api/
 * Expected time needed: 10 hours
 * Mentors: Marielle Volz
 * Tags: JavaScript, Node.js,
 * Beginner task? Yes

Citoid: Add requestFromPMID method to lib/request.js
See https://phabricator.wikimedia.org/T1197 for the corresponding bug report. In the file lib/request.js, currently there are only methods to get metadata from a journal paper from its URL or DOI. However, you can also find information using another identifier, PMID. You can use the PubMed API to find a paper's DOI given its PMID and therefore its url: http://www.ncbi.nlm.nih.gov/pmc/tools/id-converter-api/
 * Expected time needed: 15 hours
 * Mentors: Marielle Volz
 * Tags: JavaScript, Node.js,
 * Beginner task? No

Citoid: Add BibTeX as export format
See https://phabricator.wikimedia.org/T1083 for the corresponding bug report. In the file server.js, 'mediawiki', 'zotero', and 'mwDeprecated' are allowed export formats for both the 'url' and 'api' endpoints. However, scientists love BibTeX! Zotero's translation-server can translate between the 'zotero' format and a number of other formats, including bibtex. In translation-server, check out the file translation-server/build/translation-server/server-translation.js which documents the "export" endpoint.
 * Expected time needed: 20 hours
 * Mentors: Marielle Volz
 * Tags: JavaScript, Node.js,
 * Beginner task? No

Pywikibot: Replace optparse with argparse

 * Description: The Pywikibot script named "editarticle.py" uses optparse which is deprecated in Python 3.2, this should be replaced by argparse. Another script (named "replicate_wiki.py") already uses argparse which could be uses as an orientation. See also: https://bugzilla.wikimedia.org/show_bug.cgi?id=68617
 * Expected time needed: 4 hours
 * Mentors: Fabian Neundorf
 * Tags: Python, argparse
 * Beginner task? Yes

Convert Wikibase api modules to have i18n support

 * Bug report: https://bugzilla.wikimedia.org/show_bug.cgi?id=72704
 * Description: Wikibase api modules need to be converted to have support for i18n (internationalization), which is new in MediaWiki: https://www.mediawiki.org/wiki/API/Architecture_work/i18n . There is a script, although not sure if it works for Wikibase. Otherwise, the task can be done manually or use a modified version of the script. For more information on Wikibase, see https://www.mediawiki.org/wiki/Wikibase
 * Hours to complete the task: depends how familiar one is with gerrit and vagrant: https://www.mediawiki.org/wiki/MediaWiki-Vagrant . Once one figures out how to do this and converts the first module, the rest are probably quick and easy to convert.
 * Mentors: User:Aude (and others in #wikidata irc channel and probably can also ask anomie in irc)
 * Tags: MediaWiki, Vagrant, i18n, Wikibase, internationalization, internationalisation
 * Beginner task? Maybe

Category: Documentation/Training
Tasks related to creating/editing documents and helping others learn more - NO translation tasks here! (Please always follow the "Template for tasks" above!)

Make MediaWiki documentation translatable (recurring task)
(recurring task, create at least 5 times, up to ~410 times considering only one full translation to migrate on average)

Universal Language Selector: Write Help page for an uncovered input method in Universal Language Selector (ULS) (recurring task)
(recurring task, create several times)

The help pages at https://www.mediawiki.org/wiki/Help:Extension:UniversalLanguageSelector/Input_methods for all the input methods (see https://en.wikipedia.org/wiki/Input_method for general information) made available through MediaWiki's Universal Language Selector extension (see https://www.mediawiki.org/wiki/Extension:UniversalLanguageSelector ) should have relevant content that will help users use the input methods more efficiently. The content from these help pages will be displayed to the users when they click on the help button of the input method (displayed on the input method selectors). In most cases, students will not be required to make any configuration/preference changes to view ULS input methods action.
 * List of Input Methods currently missing Help pages: https://www.mediawiki.org/wiki/Category:ULS_Input_method_documentation_missing
 * Corresponding bug report: https://bugzilla.wikimedia.org/show_bug.cgi?id=57601

Hours: 5 (on an average for each input method)

Mentors: Runa Bhattacharjee

Tags: i18n, Internationalization, Internationalisation, Input methods, UniversalLanguageSelector, Documentation

Beginner task? Yes

Create a Wikimedia Phabricator How-To screencast (recurring task)
https://phabricator.wikimedia.org is a new collaboration platform used by the Wikimedia Community. (Instructions to be completed, focusing on the basics now). We have https://www.mediawiki.org/wiki/Phabricator/Help, however, wouldn't it be great to just show how to do something, instead of describing it step by step with text only?

Each screencast should focus on a single task and aim to have less than 1 minute duration. No need to agree any script in advance, just look at the written instructions, play around yourself, and record the screencast (preferably in a quiet place so your voice can be heard clearly when you are describing what you are doing in the video). The worst thing that might happen is that we give you feedback and you have to repeat the less-than-a-minute video again.

You will have to upload the screencast to Wikimedia Commons in a free video format - see https://commons.wikimedia.org/wiki/Commons:Video#Video_formats for more information.

Screencasts needed:
 * Overview of the Phabricator documentation in mediawiki.org
 * Overview of phabricator.wikimedia.org
 * Overview of phab-01.wmflabs.org
 * Create your account using your Wikimedia Single User Login.
 * Create your account using your Wikitech (LDAP) credentials.
 * Connect your SUL / LDAP identities to your account.
 * Claim your Bugzilla activity.
 * Fill your user profile.
 * Manage your notifications preferences.
 * Subscribe to a single task (and show the web / email notifications)
 * Join a project and "watch" it, explaining what's the deal.
 * Create a Herald rule for Maniphest (when it's enabled)
 * Post comments in tasks, showing the different actions available.
 * Editing a task (explaining when it is appropriate to do that)
 * Overview of the basic markup available in descriptions and comments.
 * Ways to create a task.
 * Creating a task (overview of the options available).
 * Creating a task via email.
 * Defining a URL to create tasks with certain parameters.
 * Uploading files.
 * Creating mockups.
 * Using the basic search.
 * Using Maniphest advanced search.
 * Saving and sharing search queries.
 * Requesting a new project: when do you need one, how should it be?
 * Requesting a new project: submitting a request
 * How to use phab:, and  on-wiki.
 * Introduction to Worboards (with examples of different ones)
 * Moving cards and editing tasks from dashboards.
 * What are dasboards and panels.
 * Creating a text panel.
 * Creating a query panel.
 * Creating a tab panel.
 * Creating your own dashboard.
 * More?

Category: Outreach/Research
Tasks related to community management, outreach/marketing, or studying problems and recommending solutions. (Please always follow the "Template for tasks" above!)

Wiki Release Team: Compile List of Top Requested Features (recurring task)
(recurring task; up to 12 times)


 * Choose a month from a list of months and scan the archives of the MediaWiki-l mailing list at https://lists.wikimedia.org/mailman/listinfo/mediawiki-l and the MediaWiki Supportdesk wiki page at https://www.mediawiki.org/wiki/Project:Support_desk for the chosen month. Search for mentions of feature requests or pain points that new features could address. The student will record the findings on a wiki page for review.
 * Build upon the current list: https://www.mediawiki.org/wiki/MediaWiki_Cooperation/Tasks/Feature_wishlist
 * Related bug report: https://phabricator.wikimedia.org/T953
 * 5 days to complete the task.
 * Mentors: Mark Hershberger and Alexis T. Hershberger
 * Tags: Search, Popularity, Features
 * Beginner task: No

Wiki Release Team: Compile a List of MediaWiki Third Party Customers (recurring task)
(recurring task; up to 10 times)
 * Help compile a list of active MediaWiki third party customers by searching public available sources for MediaWiki sites not currently listed on WikiApiary https://wikiapiary.com/wiki/Main_Page.
 * The student is encouraged to use creative search methods and parameters to locate active wikis. The student is expected to check against WikiApiary's database for duplication. Any duplications, or inactive wikis should not be included in the list. The student will record the findings on a wiki page for review.
 * Related bug report: https://phabricator.wikimedia.org/T951
 * 5 days to complete the task.
 * Mentors: Mark Hershberger and Alexis T. Hershberger
 * Tags: Search, Instances
 * Beginner task: No

Wiki Release Team: Research WikiApiary Sites Listed as Inactive (recurring task)
(recurring task; up to 30 times)
 * WikiApiary https://wikiapiary.com/wiki/Main_Page lists 3,000 MediaWiki sites as inactive. Research to find information as to why those inactive sites are inactive. A student will research 100 sites per task. The student will record the findings on a wiki page for review.
 * 5 days to complete the task.
 * Mentors: Mark Hershberger and Alexis T. Hershberger
 * Tags: Search, Instances, Inactivity
 * Beginner Task: No

Wiki Release Team: Identify Enterprise Wikis from List of Fortune 1000 (recurring task)
(recurring task; up to 10 times)
 * Using the Fortune 1000 list, look for instances of MediaWiki or job postings asking for knowledge of MediaWiki by those companies on the list. See https://en.wikipedia.org/wiki/Fortune_1000 and http://fortune.com/fortune500/ for more information.
 * These large enterprise wikis are often private and difficult to find. Please elaborate first on your plan and how to approach this task and discuss this plan with the mentors of this task. The student working on this list is encouraged to use creative search methods or search parameters.  Success is measured by creativity and not necessarily the number of wikis found.  A student will research 100 sites per task.  The student will record the findings on a wiki page for review.
 * 5 days to complete the task.
 * Mentors: Mark Hershberger and Alexis T. Hershberger
 * Tags: Search, Instances, Customers
 * Beginner Task: No

Wiki Release Team: Help Identify Important Questions to Ask MediaWiki Customers (recurring task)
(recurring task; up to 10 times)
 * Meet with the Wiki Release Team and participate in a discussion on important questions to ask third party MediaWiki customers in a survey.
 * A student claiming this task must have participated in and must have completed one of the following tasks: compiling lists of top requested features, compiling list of MediaWiki third party customers, researching inactive sites on WikiApiary, or identifying enterprise wikis from Fortune 1000 list.
 * 1-2 days to complete the task.
 * Mentors: Mark Hershberger and Alexis T. Hershberger
 * Tags: Customers
 * Beginner Task: No

Propose a logo for the European Wikimedia Hackathon 2015

 * Wikimedia will have a Hackathon in France in 2015. We are looking for proposals for a logo to print on T-shirts and stickers. We cannot promise that your proposal will be the one that will be finally chosen but we are interested in your idea. :) The Wikimedia logo is here: https://commons.wikimedia.org/wiki/File:Wikimedia-logo.svg . To get an idea, past Hackathon logos can be seen here: https://www.mediawiki.org/wiki/Berlin_Hackathon_2011 and https://www.mediawiki.org/wiki/Berlin_Hackathon_2012 and https://www.mediawiki.org/wiki/Amsterdam_Hackathon_2013 . This task requires existing graphics skills working with a Vector graphics application (e.g. Inkscape). Links to SVG file(s) that you have created are very welcome when you are applying for this task.
 * 120h
 * Mentors: Rachel Farrand
 * Tags: Logo, SVG, design
 * Beginner Task: No

Category: Quality Assurance
Tasks related to testing and ensuring code is of high quality. (Please always follow the "Template for tasks" above!)

Build a test case for the Pywikibot library
Improve the code coverage of the Pywikibot library test suite. Run  using instructions on Manual:Pywikibot/Test_coverage and select a set of lines of code that are not yet exercised by the test suite. Add a unit test which exercises that set of lines of code to the test suite. Create bugs for any failures encountered.
 * 10
 * User:John Vandenberg
 * Python,MediaWiki,unittest,Bugreport
 * Yes

Build a test case for a Pywikibot script not exercised by the test suite
Improve the code coverage of the Pywikibot test suite for one of its pre-packaged scripts. Select a script which is not listed at Manual:Pywikibot/Test_coverage and develop a basic test module which exercises that the code which performs the bots stated purpose. Create bugs for any failures encountered.
 * 25
 * User:John Vandenberg
 * Python,MediaWiki,unittest,Bugreport
 * No

Citoid: Create dataset in JSON of different possibilities for user-entered identifiers to use in testing (recurring task)
Users may try entering a URL, ISBN, ISSN, PMC, PMID, MID, DOI and possibly other IDs not listed here to identify a magazine, article, book, or webpage. We need an Array of possibilities to make sure a) we are correctly identifying which ID it is and b) we are correctly extracting the ID. As a first step, create a JSON file with an Array of identifiers as users might enter them, i.e. [ "ISBN-10: 0615720307","isbn 978-0615720302", " 978-0-300-14424-6" ] (true positives). Also make an Array of identifiers that looks like your chosen ID but are not valid (true negatives).
 * Expected time needed: 1-10 hours (depends on comprehensiveness of dataset and which ID is being tested.)
 * Mentors: Marielle Volz
 * Tags: JSON, Citoid
 * Beginner task? Yes

Category: User Interface
Tasks related to user experience research or user interface design and interaction. (Please always follow the "Template for tasks" above!)

A better mobile view for editor data for dashiki (https://metrics.wmflabs.org/static/public/dash/)
This task is also included in coding tasks but it fits both code and UX well.

Dashiki is the platform we are using to display data around edits in Wikipedia and sister projects. The platform itself requires minimal setup and if you have python installed in your computer you can get it running: https://github.com/wikimedia/analytics-dashiki This task consists of adapting the display of dashiki for mobile devices, at this time the display is not so mobile friendly and it is optimized for desktop, details on what the display needs to do in mobile are described on the bug, no new elements need to be created, rather selective hiding of current elements needs to happen. Coding will require CSS/HTML skills.
 * Bug report: https://bugzilla.wikimedia.org/show_bug.cgi?id=73030
 * Hours to complete the task will depend on student knowledge of CSS/HTML but about 2/3 days should be plenty.
 * Mentors: nuria@wikimedia.org
 * Tags: CSS, HTML, Mobile Web, Editor Data
 * Beginner task? Yes

Add hard drop shadow to Echo badge label text to increase readability
See the bug report at https://bugzilla.wikimedia.org/show_bug.cgi?id=55523 - you will need to find the right place in the code of the Echo extension to test and fix this: https://www.mediawiki.org/wiki/Extension:Echo. Note that many modern browsers also allow editing CSS in their included developer tools to play and test. This task requires CSS skills. You are expected to put a patch into Gerrit which will have to be merged in order to get the task completed.
 * Hours: 2
 * Mentors: Jared Zimmermann
 * Tags: CSS, HTML, Echo
 * Beginner task? Yes

Add SVG versions of PNG graphic assets and change MediaWiki to use them

 * Description: Create SVG versions of some icons listed on https://bugzilla.wikimedia.org/show_bug.cgi?id=69944 and https://bugzilla.wikimedia.org/show_bug.cgi?id=70538. Commit them in Gerrit and change the CSS that uses the icons to use the SVG versions with PNG fallback (example: https://git.wikimedia.org/blob/mediawiki%2Fcore.git/e0ad0f02b225a9e89d23e6eb840d526766af6252/resources%2Fsrc%2Fmediawiki.legacy%2Fshared.css#L243 ).
 * Expected time needed: 4 hours
 * Mentors: Bartosz Dziewoński
 * Tags: graphics, SVG, CSS
 * Beginner task? Yes

MediaWiki watchlist icon does not match on desktop and mobile skin
See the bug report at https://bugzilla.wikimedia.org/show_bug.cgi?id=54307 - you will need to find the right places in the code of MediaWiki core and the mobile skin (in the MobileFrontend extension or one of the skins) and "copy" the mobile icon to MediaWiki core. You are expected to put a patch into Gerrit which will have to be merged in order to get the task completed.
 * Hours: 96
 * Mentors: Jared Zimmermann
 * Tags: CSS, HTML, Icons
 * Beginner task? No

Common instructions for tasks
We want to use common texts in tasks wherever it makes sense to simplify the process of creating good task descriptions. Let's draft different levels of common texts: generic for all, specific to a category, specific to a type of task. When creating a task, use the levels that make sense. Let's link to on-wiki instructions and background as much as possible. This gives us freedom to improve content without having to edit multiple tasks.

For all tasks
The last sentence of each task description in Google Melange must always be: Students are required to read Wikimedia's general instructions first.

Citoid
citoid is a Node.js application (written in Javascript) that retrieves information about a webpage, book, journal article, etc. given a URL to the webpage or some other identifier, like DOI (digital object identifier). It uses another open source project, Zotero's translation-server, also written in Javascript, to do a lot of the work. Doing this work may involve reading both citoid and translation-server code. In order to get citoid working on your computer, you'll need to download both Node version 10.0 (for citoid) and xpcshell version 29.0 (for Zotero) to get both of them working. Citoid is a very new project so the code is rough around the edges and may change a lot- but that means there's lots of code to write! There are installation instructions and more information available at https://www.mediawiki.org/wiki/Citoid

Huggle
Huggle is a fast diff browser application intended for dealing with vandalism on Wikimedia projects, written in C++ (C++11 with Qt framework). More information: https://meta.wikimedia.org/wiki/Huggle and https://en.wikipedia.org/wiki/Wikipedia:Huggle.

Source code is available at https://github.com/huggle/huggle3-qt-lx and can be compiled on Linux, Windows and MacOS.

JavaScript gadgets
Wikipedia and other Wikimedia projects use gadgets written in JavaScript. See https://www.mediawiki.org/wiki/Gadget_kitchen for more information and potential task ideas.

Kiwix for Android
Kiwix is a Wikipedia offline reader. These are tasks related to the new release of its Android app - see https://play.google.com/store/apps/details?id=org.kiwix.kiwixmobile. This requires knowledge of the Java programming language. You also need a GNU/Linux distribution. Go to https://sourceforge.net/p/kiwix/kiwix/ci/master/tree/, checkout the code and follow step-by-step the instruction for Android of the "COMPILE" file.

Lua templates
MediaWiki templates are wiki pages to be included in other pages. Templates can take arguments, allowing editors to create special types of content like infoboxes, banners, and more. Originally, templates were written wikitext with parser functions, mimicking the functionality of a very basic programming language (but requiring advanced skills to get smart results out of them).

This problem has been solved allowing templates to rely in modules written with Lua, a proper programming language: https://www.mediawiki.org/wiki/Lua. Now we have many wikitext templates waiting to be rewritten in Lua. Take one and rewrite it! See also: https://en.wikipedia.org/wiki/Wikipedia:Lua/Help and https://en.wikipedia.org/wiki/Help:Lua_for_beginners.

Steps: 1. Create a template at https://en.wikipedia.org/wiki/Template:XXXXXXXXXXX/sandbox. 2. Create a module at https://en.wikipedia.org/wiki/Module:Sandbox/XXXXXXXXXXX. 3. Report your progress soon and often at https://en.wikipedia.org/wiki/Wikipedia:Lua/To_do where not only GCI mentors but also other community contributors can follow the progress and help.

Pywikibot
Pywikibot is a Python-based framework to write bots for MediaWiki. See https://www.mediawiki.org/wiki/Manual:Pywikibot for more information. Patches can be submitted via Gerrit (you need a MediaWiki.org account). More documentation on Gerrit can be found at https://www.mediawiki.org/wiki/Manual:Pywikibot/Gerrit. After you have successfully claimed this task in Google Melange please do use the task in Phabricator for communication instead of Google Melange. This allows more PWB developers to be reached! General development questions can be asked on the Pywikibot mailing list at https://lists.wikimedia.org/mailman/listinfo/pywikipedia-l and the #pywikibot IRC channel (see https://www.mediawiki.org/wiki/MediaWiki_on_IRC).

User Interface: SVG Graphics
Using bitmap images creates two problems: They have a bad quality in high resolution displays and they are difficult to edit. Join the community goal of converting all logos to SVG! Your task is: 1. Create exact SVG replicas of these bitmap files (add link here to bitmap file(s)). 2. Upload the logos to https://commons.wikimedia.org, using this name fomat: (add here).svg. After publishing each image, edit the description following this example: (add example) 3. Notify the completion of your task: In addition to marking the task ready for review here in Google Melange, you must notify it also in the bug report (link?) tracking the progress of this community project. Just add a comment there with the links to your SVG file(s) in Commons. This task requires existing graphics skills working with a Vector graphics application (e.g. Inkscape). Links to SVG file(s) that you have created are welcome. Basic knowledge of CSS might also be helpful for integration.

Visual Editor
VisualEditor is MediaWiki's WYSIWYG editor. You can find out more about it at https://www.mediawiki.org/wiki/Extension:VisualEditor.