Google Code-in/2013

Google Code-In is a contest to introduce pre-university students (ages 13-17) to the many kinds of contributions that make open source software development possible. Students must complete tasks (see examples), one at a time. The Google Code-in 2013 contest runs from November 18, 2013 to January 6, 2014.
 * 2013-11-01: Mentoring Organizations for Google Code-in 2013 are announced (Google's announcement)
 * 2013-11-01: Wikitech-l: Google Code-in: YES, WE ARE IN! (our community annoucement)

Instructions for GCI students
These instructions are common to all the GCI tasks. Each category of tasks has further instructions.

Feedback 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). For feedback not tied to a specific task you can use more generic channels like IRC or mailing lists. Avoid private email or support requests in our social media channels. Please be patient when asking questions. Learn more at Communication.
 * Sometimes the channel is a bug report. See Bugzilla (except for Kiwix tasks which use Sourceforge instead).
 * Sometimes the channel is a wiki discussion page. See Help:Talk pages.

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 more information. In case you have problems with Gerrit, providing your work in the corresponding bug report in Wikimedia Bugzilla is an acceptable workaround.

Tasks
This selection shows the variety of tasks available. The descriptions of the tasks are not final, and we are still polishing them. We can generate more tasks for most categories. As a reference, currently we have identified about 240 annoying little bugs.

Mentors: Please add new tasks directly in Google Melange instead of this wikipage after reading the Mentor's corner section below.

Code
(Mentors: please add here the common instructions for the tasks under this category)

Tasks related to writing or refactoring code.
 * [] Make SimpleSearch parameters to ApiOpenSearch configurable. has some detailed explanation; basically just add a new config variable to DefaultSettings.php and use it where appropriate. Matma Rex (talk) 15:55, 18 October 2013 (UTC)
 * [] Provide CSS class (hlist) to define horizontal lists in MediaWiki core. Entails copying a chunk of code from en.wp's common.css and pasting it into a new module in core (explained in detail in bug comments). Matma Rex (talk) 15:55, 18 October 2013 (UTC)
 * [] newmessageslinkplural and newmessagesdifflinkplural shouldn't use fake values for the number of changes. Details in . Matma Rex (talk) 15:55, 18 October 2013 (UTC)
 * [] Merge ExpandTemplates extension into MediaWiki core. Copy the new special page and register it the way core special pages are registered. Matma Rex (talk) 15:55, 18 October 2013 (UTC)
 * [] jQuery.makeCollapsible: support table captions. The code that needs to be modified is very straightforward (if a little boring and repetitive). Matma Rex (talk) 15:55, 18 October 2013 (UTC)
 * [] collapsibleTabs code cleanup: null != undefined, undefined variables passed to .data. Matma Rex (talk) 15:55, 18 October 2013 (UTC)
 * [] [Echo extension] Mention notification text broken if there is no section. Needs finding out the place where the link is constructed (just search for the message key that's used there), if-ing out the case where section is empty and adding&using a new message there. Matma Rex (talk) 15:55, 18 October 2013 (UTC)
 * [ & ] Interwiki tooltip shouldn't start with a dash on the main pages; interwiki tooltip: " should not be double-escaped. Explanation for each in bug comments; they're both simple fixes in the same area of code, so sticking them together. Matma Rex (talk) 18:34, 18 October 2013 (UTC)
 * [] Migrate legacy redirectToFragment to modern structure. It's a little function that needs love, things to do listed at . Matma Rex (talk) 19:36, 18 October 2013 (UTC)
 * [] Create a VisualEditor plugin tool to add/edit maths blocks: This was a GSoC 2013 project, but there is still a lot can be improved, such as . --Jiabao Wu (talk) 08:15, 26 October 2013 (UTC)
 * [] Make the Parser Functions extension deliver correct instead of guessed results of incomplete dates and make this behaviour configurable. Krabina (talk) 08:18, 4 November 2013 (UTC)

Kiwix for Android
''All tasks have been imported into Google Melange. Mentors: Please add further tasks directly in Google Melange (feel free to check already imported tasks) after reading the "Mentors' corner" at the bottom of this page.'' --AKlapper (WMF) (talk) 15:27, 6 November 2013 (UTC)

Lua templates

 * 1) Wikipedia and other Wikimedia projects have dozens of old Wikitext-based templates waiting to be rewritten in Lua. We can list many more here. There is also Wikipedia:Lua requests.
 * 2) * en:Template:Taxobox / zh:Template:Taxobox (not exactly the same thing as the one in English Wikipedia)
 * 3) Find TEI equivalent of Author template on Wikisource. - Rtdwivedi
 * 4) Improvements to LUA modules
 * 5) * commons:Module:Languages needs cleanup: All template-constructions (e.g. in,  ,  ) should be substituted by calls to MW's LUA API,   should not use   (because it's too expensive), documentation must be added, ... Rillke (talk) 13:39, 2 November 2013 (UTC)
 * 6) * Compare and evaluate different documentation approaches for LUA modules in different Wikis and port the best elements to Commons. Rillke (talk) 13:43, 2 November 2013 (UTC)
 * 7) Bibliographic data on Wikipedia/Wikidata.
 * 8) * Create a new template based on en:Template:Infobox book that can retrieve bibliographic information from wikidata according to the data model (d:Wikidata:Books task force). Initially only for the work item only. --Micru (talk)
 * 9) * Enhance the template so it can show information belonging to a featured edition. It can be the first edition, the original, a translation, a contemporary version, etc. Example fr:Des souris et des hommes --Micru (talk)

JavaScript gadgets
This program is perfect for fixing and updating gadgets written in JavaScript. We are harvesting tasks from Gadget kitchen/Requests and Bugzilla.
 * Write and promote a module that detects both, usage deprecated JavaScript functions as well as extremely bad coding style and syntax errors in JavaScript files. This might be a good template. Rillke (talk) 14:11, 2 November 2013 (UTC)
 * Write a module using the above (deprecation checker) to iterate over all JavaScript files in a wiki's MediaWiki-namespace creating a report. Rillke (talk) 14:11, 2 November 2013 (UTC)
 * Identify gadgets at Wikimedia Commons and other scripts that still make use of deprecated functions and make suggestions how to replace them. Rillke (talk) 14:11, 2 November 2013 (UTC)
 * Create a script capable "packaging" gadgets so they can be shared with other wikis using ResourceLoader. Rillke (talk) 14:11, 2 November 2013 (UTC)
 * Bug fixes and new features for the slideshow
 * Fix the positioning/sizing-bug for the "main picture"
 * Toggle keyboard-observers when slideshow is closed/opened (so it does not interfere with other gadgets when closed)
 * Add option to hide the caption/info-container
 * Use thumbnails that are available on page (and thus do not have to be loaded again) for the thumbnail preview bar, if possible
 * Add Touch&Swipe support, for both the thumbnail-bar and the "main picture" for touch and mice (where it is actually drag&drop-like).
 * Create and document an API so external tools may a) provide a list of images asynchronously b) add jQuery-Objects or DOM-Elements to the caption/info-container (e.g a button for votes). Rillke (talk) 14:11, 2 November 2013 (UTC)
 * Apply MediaWiki's coding-style to Common's Stockphotot gadget, outsource style (maybe create a sprite for all the images), make it modular: Input: HTML-string; Output: An object containing all the links -- this allows us to re-use this gadget inside other tools. Rillke (talk) 14:17, 2 November 2013 (UTC)
 * Media uploads via websockets as HTTP multipart/form-data submission streaming to avoid firewalls.

Bots
PyWikibot is a Python-based framework to write bots for MediaWiki. The project just moved its bug database to Wikimedia's Bugzilla and there are many potential tasks to pick from.
 * Improvement of interacting with Wikidata including redesigning interwiki.py and improving harvest_templates.py Ladsgroup (talk) 17:25, 28 October 2013 (UTC)
 * Porting scripts and tasks of compat to core Ladsgroup (talk) 17:25, 28 October 2013 (UTC)
 * There are several documentation about how we can port codes Manual:Pywikibot/i18n conversion and Manual:Pywikibot/2.0/Conversion (more general info about porting can be found in Manual:Pywikibot/2.0. Main unported scripts are:
 * commonscat.py
 * nowcommons.py
 * pagefromfile.py
 * protect.py
 * reflinks.py
 * unusedfiles.py
 * welcome.py
 * Making PWB compatible with Python 3 (forward compatibility). Ladsgroup (talk) 17:25, 28 October 2013 (UTC)
 * you can split it to porting several scripts instead of the whole PWB, or codes in scripts folder of core. there several manuals for porting and

Documentation/Training
(Mentors: please add here the common instructions for the tasks under this category)

Tasks related to creating/editing documents and helping others learn more. How can these students help fixing Bug #1?


 * [] Watchlist and recent changes should include a legend for the N, m, b, ± icons. They have description tooltips, the text could be reused with minor changes. Matma Rex (talk) 19:36, 18 October 2013 (UTC)
 * Review and polish browser test automation docs for newcomers.--Qgil (talk) 22:27, 22 October 2013 (UTC)
 * Sort out Category:Tutorials.--Qgil (talk) 22:27, 22 October 2013 (UTC)
 * More tasks to be extracted from Technical communications/What you can do. guillom 08:56, 23 October 2013 (UTC)
 * Unify 1, 2, 3, 4 to have a reference documentation for proofreading and use of ProofreadPage extension. Rtdwivedi 14:00, 4 November 2013 (UTC)
 * List the Lua modules active on various Wikisources here. Rtdwivedi 14:00, 4 November 2013 (UTC)

Outreach/Research
(Mentors: please add here the common instructions for the tasks under this category)

Tasks related to community management, outreach/marketing or studying problems and recommending solutions.


 * [] Make tutorial video on how to use Bugzilla.--Qgil (talk) 22:22, 22 October 2013 (UTC)
 * Create a Promotion landing page explaining ways to promote MediaWiki and related software projects. To be linked from How to contribute.--Qgil (talk) 22:34, 22 October 2013 (UTC)
 * How to get volunteers involved in Operations / sysadmin tasks. See Sysadmin hub & wikitech-l thread.--Qgil (talk) 22:34, 22 October 2013 (UTC)
 * Starter kit summarizing all the things seasoned MediaWiki editors and contributors assume and forget to explain.
 * Self-help guide to organize events. See Events kit and how WordPress does it.--Qgil (talk) 22:34, 22 October 2013 (UTC)
 * Plan a Guided Tour at mediawiki.org.--Qgil (talk) 22:34, 22 October 2013 (UTC)
 * Improve the confirmation email sent to new registered users and sync Template:Welcome.--Qgil (talk) 22:34, 22 October 2013 (UTC)
 * Check/update Wikimedia's info page at OpenHatch and SocialCoding4Good.--Qgil (talk) 22:34, 22 October 2013 (UTC)
 * What to do with the social media stats being collected at Talk:Community metrics?--Qgil (talk) 22:34, 22 October 2013 (UTC)
 * Sort out Wikimedia Mobile engineering pages.--Qgil (talk) 22:34, 22 October 2013 (UTC)

Quality Assurance
(Mentors: please add here the common instructions for the tasks under this category)

Tasks related to testing and ensuring code is of high quality.

''All tasks have been imported into Google Melange. Mentors: Please add further tasks directly in Google Melange (feel free to check already imported tasks) after reading the "Mentors' corner" at the bottom of this page.'' --AKlapper (WMF) (talk) 15:27, 6 November 2013 (UTC)

User Interface
(Mentors: please add here the common instructions for the tasks under this category)

Tasks related to user experience research or user interface design and interaction.

''All tasks have been imported into Google Melange. Mentors: Please add further tasks directly in Google Melange (feel free to check already imported tasks) after reading the "Mentors' corner" at the bottom of this page.'' --AKlapper (WMF) (talk) 11:34, 7 November 2013 (UTC)

Mentors' corner
First things first:
 * 1) Become an official mentor in Google's Melange.
 * 2) List above the tasks you want to create at the GCI site.
 * 3) Before starting creating tasks, please contribute to the common boilerplate text.
 * 4) Watch this page for more instructions, or ask for them.
 * 5) Be ready to learn with the rest of us along the way.  :)

Become a Wikimedia GCI mentor
Register as mentor. Afterwards, inform Quim and Andre of your username in Google Melange so you can be invited to become a mentor for Wikimedia. (Tasks can not be imported before you have been marked as a mentor for Wikimedia.)

Requirements of a task
All the tasks listed on this wikipage must be also listed in Google Melange well before November 17, since that is the interface that students will use. A basic boilerplate task description pointing to bug reports should be added below.

Please add new tasks directly in Google Melange instead of this wikipage. 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.
 * 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.
 * Tasks are self-contained. Students must be able to complete it without much knowledge of the context, or the background.
 * By default, tasks are described in a bug report with the keyword "easy" and 1-2 mentors CCed and volunteering explicitly in the comments.

A list of potential candidate bugs is available as the GCI candidate bugs saved search on Bugzilla (MediaWiki and extensions, +easy, -gci2013, no patches pending).

Candidate bug reports in Wikimedia Bugzilla should have " gci2013 https://www.mediawiki.org/wiki/Google_Code-In#Candidate_tasks " added to their Whiteboard field to make it easy to track them. See the current list:

Org admins Quim Gil and Andre Klapper go through proposed tasks and confirm them. CC us in the bug reports.
 * Bug description. Detailed explanation with full URL link to corresponding bug report and links to any information that could be helpful. Hours that it takes to complete the task (be generous!). Arbitrary tags that can be searched for (e.g. programming language). Name of the mentor(s): ~

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 be: Students are required to read Wikimedia's general instructions first.

Kiwix for Android
Kiwix is a Wikipedia offline reader. These are tasks related to the new release of its Android app. Instructions to compile the app can be found here (Android section). This requires knowledge of the Java programming language.

User Interface: SVG Graphics
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.