Google Code-in/2015

'''Note: This is a planning page. Wikimedia has not yet applied for Google Code-in 2015. We will know by November 13th if Wikimedia will take part in Google Code-in 2015!'''

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 2015 contest runs from December 07, 2015 to January 27, 2016 (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.


 * Each GCI task specifies a public community channel for related questions and comments that might be more efficient than the Google Code-in site. 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 (also called "task"). See Phabricator (except for Kiwix tasks which use Sourceforge instead). In the upper part of a bug report you can see the project 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.

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.

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

First things first:
 * 1) Before creating tasks, please contribute to the common boilerplate text below under "Common instructions for tasks".


 * 1) Watch this page for more instructions, or ask for them.
 * 2) Be ready to learn with the rest of us along the way.  :)
 * 3) After November 13th, register as an official mentor on the Google Code-in site.
 * 4) After November 13th, create your tasks on the Google Code-in site. Org admins are happy to help!

Become a Wikimedia GCI mentor
'''Note: We do not accept task proposals yet. Stay tuned.'''

Register as mentor on the Google Code-in site quickly after November 13th, and then request a connection with Wikimedia through "My Dashboard" Org admins will receive a notification and will accept you. From that point you will be able to create tasks, add yourself to tasks, add other mentors to your tasks.

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.
 * 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.

Some ideas for tasks:
 * A list of tasks which were already GCI candidates in 2013
 * A list of tasks which were already GCI candidates in 2014
 * A list of "easy" tasks which could fit for GCI.
 * Example tasks from previous years across organizations

Workflow
When a student submits a task for review on the Google Code-in site, 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 on the Google Code-in site where your feedback is located, just in case.

Proposed tasks
'''We do not accept task proposals yet. Stay tuned.'''

Template for tasks
Tasks need to include the following information:
 * Task title. You might want to mention your project name in the title.
 * At least one category:
 * Code: Tasks related to writing or refactoring code.
 * Documentation/Training: Tasks related to creating/editing documents and helping others learn more. No translation tasks allowed.
 * Outreach/Research: Tasks related to community management, outreach/marketing, or studying problems and recommending solutions.
 * Quality Assurance: Tasks related to testing and ensuring code is of high quality.
 * User Interface: Tasks related to visuals, design or workflows in applications.


 * 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. Note that you should add the below. Please do not use any wiki markup here but full URLs. Avoid misunderstandings and wrong expectations: Mention skills that could be helpful or are required for students so they can judge themselves. If you expect a patch in Gerrit from the student, say so. If you expect the main communication to happen in the Phabricator task or expect students to discuss a first iteration with you on IRC, say so by telling your IRC nickname(s) and channel.
 * Hours (integer) to complete the task. Keep in mind students' real life. Be generous.
 * One or two mentor(s) available for this task. The mentor(s) must have agreed on mentoring and be registered on the Google Code-in site.
 * Tags: Any arbitrary keywords related to the task which can be searched for, e.g. the programming language.
 * Beginner task? Yes/No (for students who are just getting started - such introductory tasks should take less than 3 hours to complete and are less technical in nature, to help students learn how "things work"). Examples: Setting up the development environment and providing a screenshot of it, or triaging five bug reports in your area.

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. The Google Code-in tasks are related to the Android app. They require knowledge of the Java programming language and you also need a GNU/Linux distribution and basic knowledges about git.

To step in, follow these instructions:
 * 1) Install a GNU/Linux distribution, ideally Ubuntu (in a virtual machine like Virtualbox)
 * 2) Install development tools like git, autoconf, etc.
 * 3) Go to Sourceforge and create an account
 * 4) Click on the "Fork" button available here (you need to be logged)
 * 5) Clone your project using git clone on your local machine
 * 6) Follow the compilation instructions for Android

One time you think your code works and is good enough to be reviewed, do like following:
 * 1) Commit and push your code from the command line using git

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: 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.
 * 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.

VisualEditor
VisualEditor is MediaWiki's rich-text editor (see https://en.wikipedia.org/wiki/Online_rich-text_editor for general information). You can find out more about it at https://www.mediawiki.org/wiki/Extension:VisualEditor.