WordPress.org

Codex

GSoC2011

Contents

Introduction

Howdy Students! Google Summer of Code is a program in which Google sponsors exceptional college students to develop open source code under the guidance of mentoring open source projects. WordPress is very pleased to be participating as a mentoring organization again this year. Students who complete their summer projects successfully and on time are paid a stipend by Google that adds up to $5,000 for the summer. Project progress is evaluated at midterm and at the end for payment consideration. To apply for a GSoC slot working with WordPress, you should be proficient in PHP (and JavaScript if your project involves a significant amount of front-end code), and have familiarized yourself with the WordPress codebase.

Please see Jane's GSOC 2011 Timeline post at WordPress Development Updates.

Ideas

If you have your own idea for a project, include it in your application and describe it thoroughly. You are not limited to ideas from this list.

Know you want to propose a GSoC project around WordPress, but aren't sure what you want to do? Below are a few ideas we think would work well as GSoC projects. Also see the popular ideas submitted by members of the WordPress community. If you share one of their passions, why not make that idea your own? Also, check out the ideas from 2009.

Note that you can't take already released code and claim it as part of your project. So, if you propose one of the ideas that have already been implemented by former students, you will have to code it from scratch.

Android Tablet Support (0)

WordPress has a number of fully open source popular mobile apps including one for Android that has several hundred thousand users. There is a new wave of Android-based (Honeycomb) tablets coming out, let's adapt our phone-optimized app to work well on these newer, bigger-screen devices. (If you like mobile development check out the Tracs for each app, there are some other potential ideas there.)

Touch-optimized admin CSS (0)

The WordPress web admin works okay on touch-oriented devices, but it's really better suited for being driven by a mouse right now. Ideally using just an alternative stylesheet, go through WP from the login to the menus to comment moderation and make it sing on a touch device. Bonus points for expanding into JS and adding gestures where they make sense, like comment moderation.

New User Walkthrough (0)

This is an idea that's been suggested many times and it never seems to make it into a release. We'd love for someone to take this one. When you first set up a WordPress site, there are certain steps you have to go through. Pick a theme, change your password, edit your tagline, choose your comment settings, etc. It would be great if on the Dashboard screen there was a module that kept track of how many of these things you've done, and marked off your progress, much as LinkedIn does when you set up a profile. Each successive login would offer the user an option to finish/enhance their site setup by completing another thing(s) they haven't gotten around to yet.

For a rough idea, see last year's project, Mike Whitfield - Setup Meter.

Enhanced Emails (0)

WordPress sends out a bunch of email notifications for new users, comments, password resets, and more. Right now they're all plain-text -- let's bring them into the 21st century with well-designed HTML + CSS that brings additional functionality into the notifications, makes them more readable, and is optimized and tested across common web mail clients, desktop mail clients, and phones including iPhone, Android mail, and Blackberry.

Super-Accessible Admin (0)

WordPress generally gets good reviews for accessibility, but we can always do better. Sometimes there's a split though... providing the best possible experience on modern browsers with JavaScript enabled for the average user is not always the same as providing the best possible experience for people who need extra-large minimum font sizes, click targets, no JavaScript, etc. This project would be to create a version of the admin that is optimized for these users: large fonts, high contrast, no JavaScript, large click targets, etc. This project would be done as a plugin, but if successful, would likely be integrated into core as another admin 'theme' along with the blue and gray choices people currently have. You should have a solid foundation with section 508 requirements and coding techniques to be compliant. Design help will be available from the UI/accessibility groups as needed.

Template Versioning (0)

WordPress saves post revisions, but changes to theme files are not recorded, though the presentation layer is sometimes just as important. Build a versioning system for template files within the theme editor.

For a starting point, see last year's project, Andrew Nacin - Theme Revisions.

Comment Moderation (0)

Improve comment moderation in the administration pages so that when threaded comments are enabled they are displayed when moderating individual posts comments. It would also be useful to allow comment re-parenting so as to fix issues where a comment reply is not associated with the correct parent. Support should also be added to the XML-RPC api to allow an external app to implement similar functionality.

For a rough idea, see last year's project, Matt Harzewski - Comments.

Media (0)

In the coming year, the WordPress media handling functions are expected to be redesigned, with new features added and significant recoding of existing features, some of which will be moved into core plugins. There will be many components to the media overhaul, any of which could make a great Summer of Code project. We'll be looking to add things like slideshows, better gallery functions, creating more user settings for media files and templates, and dozens of other features that could be packaged up for SoC projects.

Move WordPress (0)

Currently, if you want to move your WordPress install to a new host and keep the same domain, you only need to move all the files (WordPress Core, Themes, and Plugins), and then export/import the database. It’s pretty straight forward, but still more complex than many users are capable of.

However, if you want to change the domain (even without moving to a new host) you have to export the database, do some search and replace on the .sql file, and then re-import the updated database. Even then, if the new domain has a different number of characters in it than the old one did, you can run against problems if any of the places you replaced the name happened to be inside a serialized array (almost all the options, including things like widget settings, text widget text, etc).

The goal of this project would be to make a these kinds of transitions simple and smooth. If only the domain is changing, then when the user updates the WordPress URL we would update internal links in their posts, settings, image urls, etc. If they are moving to a new host, allowing them to install WordPress at their new host and enter their credentials for their old host (WordPress admin credentials as well as FTP credentials) and WordPress would simply import everything (posts, settings, uploads, theme, plugins, etc).

For a similar project, see last year's project, Brian McKenna - Automatic Migration

Refresh the Android App UI (0)

The WordPress for Android app is over a year old now and a lot has changed in mobile user interfaces since. The app could use a refresh to get a user blogging faster, including a 'Dashboard' type home screen to be able to create a new post in just one click. This refresh should remove the current 'tabs' interface and also take advantage of Post Formats for posting pictures, videos, etc. A good example of apps that currently use a dashboard type experience are Facebook and Twitter for Android.

A general idea of where the app should be going can be found on the android developers blog.

Refresh the BlackBerry App UI (0)

The WordPress for BlackBerry app is over two years old now and a lot has changed in BlackBerry user interfaces since. This refresh should give us a completely new UI for latest devices (devices running OS5.0 or higher) including a new Touch release for Touchscreen devices. The app could use a refresh to get a user blogging faster, including a 'Dashboard' type home screen to be able to create a new post in just one click taking advantage of Post Formats for posting pictures, videos, etc.

Enhance Profiles.WordPress.org (0)

The Profiles.WordPress.org site is meant to be a place where you can see at a glance a person's involvement with the WordPress project. For example, if you look at Aaron Campbell's profile, you can see that he has 18 plugins, several Trac tickets that he’s been active in over the last couple months, as well as some interactions in the support forums as well as the ideas forum.

The goal of this project would be to create a BuddyPress plugin that would enhance these profile pages and attempt to create a 'rank' based on the user’s activity, which could be used to weight their comments on the Ideas forum, trac tickets, etc. The plugin will need to specifically work on Profiles.WordPress.org but also be something that other sites or projects could benefit from.

Currently I can’t think of that many enhancements to the existing profile information, except maybe showing plugins that the user is a contributor on not just plugins they started. If you have other great ideas, we’d love to hear them.

The rank will need to be well thought out, to make sure that contributors are given better rank than people that leave useless comments on Trac, etc. We could possibly add more weight to patches than to posts, or even look for commits that gave props to the user, etc.

Full-Throttle Trac Annihilation (0)

If you look at trac, there are literally hundreds of tickets for bugs, enhancements, feature requests and blessed tasks that never quite make it in. Not every GSoC project has to be a big single-feature goal. Helping us improve existing core WordPress code is also very valuable. For a Full-Throttle Trac Annihilation project, you'd want to identify the areas of code you're most comfortable working with, and identify a scope/minimum set of tickets that you will fix and close by the end of the project term. This could be based on a component, such as accessibility, comments, UI cleanup (Jane would love this) or upgrading, or could be a selection of specific tickets you think are important to address and would provide you with a summer challenge. The benefit of this project type is that you will have the entire development community to give you feedback as you work.

Progress Bars (0)

In various places in the WordPress UI, there are times when you're waiting for something to happen: a post to publish, a file to upload, a plugin to install. Each of these instances uses a different method of showing the user what's going on: a spinner, "crunching," and plain text announcements when it's done, respectively. This project would be to create a progress bar for actions that require time to elapse, and embed it into all the functions of this type.

BuddyPress (0)

BuddyPress is a plugin for WordPress that turns a WordPress blog into a social network. Since BuddyPress is still relatively new, there are infinite project possibilities, and we're interested in any proposals that involve extending BuddyPress.

Child Theme Management in WordPress (0)

The WordPress theme directory does not currently accept child themes, as WordPress has no way of ensuring that people have the proper parent theme installed. This project would modify WordPress so that it could download child themes and resolve their dependency on a parent theme.

GlotPress (0)

GlotPress is a web-based collaborative translation tool. It is a web alternative to poEdit and the rest desktop gettext editing tools. Code-wise GlotPress is based on BackPress and a tiny MVC layer on top of it. The project will be to add functionality to GlotPress:

  • fuzzy strings -- probably the most interesting part -- new strings should be matched with old ones. If they are similar enough the old one should be updated instead of inserting a new string.
  • tags -- users should be able to tag strings in addition to some machine tags (for example all strings in the admin panel should be tagged wp-admin)
  • comments for translations

You will like the project if you also like object-oriented programming and clean, self-explanatory code.

bbPress (0)

bbPPress is the forum software of the WordPress family. It is currently being rewritten as a WordPress plugin. It'll need a bulletproof script for upgrading its data from the old standalone version, a bit more integration work, and importers for Vanilla, vBulletin, phpBB, etc.

File Uploader (0)

The current multi-file uploader is in need of upgrading. There are several open source projects that offer well supported uploaders with many new features: use of HTML 5.0 instead of Flash, drag and drop, on the fly resizing, etc. (depending on browser support). The project would have two parts:

  • evaluating the uploader scripts in terms of support, features, complexity of integration with WordPress, etc. and selecting the one that fits best.
  • integrating the selected script into WordPress (or working on the integration, depending on time and complexity).

The goal of this project would be to upgrade the current uploader in WordPress core while keeping the existing code hooks intact as much as possible.

Language Packs (0)

WordPress is translated into more than five dozen languages. Currently translations for plugins and themes are bundled by the theme or plugin author in the download package, with the translations manually loaded in code. For core, the translations are bundled in localized distributions of WordPress.

The goal of this project would be to separate translations from existing download packages for themes, plugins, and core, by implementing language packs. These packs would be downloaded from the GlotPress installation at translate.wordpress.org (where they would be built on the fly). While language packs may eventually be implemented in WordPress core, this is conceivable as a plugin. The plugin should be able to install a language pack for a specific localization and load it automatically. Ideally, the plugin author would only need to internationalize a plugin and a translator to enter translations into GlotPress, and WordPress should be able to handle the rest.

Work is also necessary in GlotPress for this (support for plugins and themes, ability to build download packages, etc.), so this task can probably serve as two separate projects.

Front End Posting template tag (0)

The P2 theme allows users to post directly from the front end. Extracting this functionality into a template tag that could be used by any theme and extended for use in custom post types would make it easier for other theme developers to have this functionality.

Improving WordPress Tests Suite (0)

WordPress has tests (trac, svn), but they can be improved in a few areas:

  • Maintainability – the tests use fat fixtures and often test for too specific conditions. Using factories instead of fixtures, refactoring the tests and proactively helping people new to testing will help having a more maintainable test suite.
  • Ease of running the test – moving away from the custom runner and changing into a simple PHPUnit suite will help people use their favourite PHPUnit-compatible tools (for example in-editor runner).
  • Failures – there are failing tests in the suite and people don't notice if more failures occur. Cleaning up the failures and setting up a CI server will help fixing failures quickly.
  • Speed – the tests take too much time, which discourages people from running them. Smart rollback on each test case and using vfsStream for file operations can speed things up.

There are probably other improvements you could make and you need to have a clear proposal on which issues you want to work on during your GSOC project.

Resources:

Unit Testing Framework for Plugins (0)

WordPress has unit tests (trac, svn) and we're really trying to make unit tests a priority. This should be something that is simple and easy to use that would let plugin authors begin adding unit test to their plugin quickly. It would be great for plugin authors to do the same for a couple reasons:

  • Plugins can have reversions too – Usually plugins are relatively small, but they doesn't mean they wouldn't benefit from unit tests to make sure they don't mess things up.
  • Plugin authors are often future core contributors. Teaching plugin authors to create unit tests will ultimately help WPs test coverage.

Mentors

Aaron Campbell, aaroncampbell
Core contributor since 2007, plugin author, etc. Generally available for mentoring on any idea but specifically interested in the profiles.wordpress.org idea.
Aaron Jorbin, jorbin
Core contributor. Knowledgable about all aspects of the WordPress code base, with expertise in how themes and plugins work and interact with core. Available as a backup mentor.
Alex M, Viper007Bond
Core contributor. Available as a backup mentor.
Andrew Ozz, azaozz
Lead WordPress core developer. Experienced with all aspects of the WordPress code base.
Andrew Nacin, nacin
Core developer, knowledgeable about all aspects of WordPress code base. Generally available for mentoring on any idea.
Andy Skelton, skeltoac
Core contributor, experienced in most aspects of the WordPress code base. Looking for proposals encompassing new classes and methods for database row objects (ticket).
Austin Matzko, filosofo
Core contributor since 2005, generally available for mentoring on any idea. Interested in projects involving taxonomy, rewrite/query stuff, bbPress, or anything clever.
Chris Jean, chrisbliss18
Expertise in theme and back-end features, but open to anything.
Cristi Burca, scribu
Former GSoC student, guest commiter on WP 3.1. Available for general mentoring.
Dan Roundhill, mrroundhill
Available as a mentor for WordPress mobile apps.
Danilo Ercoli, daniloercoli
Available as a mentor on WordPress for BlackBerry.
Daryl Koopersmith, koopersmith
Former GSoC student for two years, available for general help but especially things around Javascript or front-end interaction.
Dominik Schilling, ocean90
Core contributor. Multisite, CSS, Javascript and browser compatibility.
Eric Mann, ericmann
Anything around XML-RPC or remote APIs in general.
Mitcho Erlewine, mitchoyoshitaka
Core contributor. Strong interest in projects involving JavaScript, advanced APIs, A/B testing, file management.
Isaac Keyet, isaackeyet
UI/UX design and mobile development. Available as a mentor for WordPress mobile apps.
John James Jacoby, jjj
Lead developer of BuddyPress and bbPress. Interested in projects around BuddyPress and bbPress.
Jon Cave, duck_
Core contributor. Available as a backup mentor.
Justin Shreve, jshreve
Former GSoC student, core contributor. Available for general mentoring.
Nikolay Bachiyski, nbachiyski
Any ideas in the Unit Testing and i18n/l10n fields, available to mentor on any project.
Pete Mall, PeteMall
Guest committer for multisite. Keen on any projects related to multisite and the network admin. Also interested in the Move WordPress project.
Peter Westwood, westi
Lead WordPress core developer. Experienced with all aspects of the WordPress code base. Interested in Unit Testing. Available to mentor on any project.
Thorsten Ott, tott
Expertise in WordPress plugin and theme development. Good knowledge in linux based video processing and use of WordPress beyond blogging. Available to mentor on any project.
Dion Hulse, dd32
A two-time GSoC Student and current WordPress committer, in depth knowledge of a lot of the WordPress codebase (particularly of the Update/Upgrade/Installer functionalities). Available to mentor on any project.

Additional members from the WordPress open source community may be added as mentors based on project needs.

Drop-in Mentors

Jane Wells, janewells
UI/UX design, available to provide guidance on UI aspects of all projects to ensure user interface fits into current and future WordPress UI.
Peter Westwood, westi
Backup WP GSoC admin for the unlikely event that Jane has a water landing.
Matt Mullenweg, photomatt
Co-founder and Lead Developer of WordPress. Checking in now and then to see what's up and coming and offer a few words of wisdom.

Additional members of the WordPress core contributor community will help guide students through interaction on the blog we will set up up for this purpose, where they will give feedback on weekly student reports and respond to student questions.

How to Apply

Excited by the possibilities, and want to know what you have to do to apply? Awesome!

  • First, check out Google's FAQ and see if you're eligible.
  • Figure out which idea(s) you want to apply to work on. Send an email to the wp-hackers list with your proposed approach to get feedback and see if you're on the right track.
  • While that's happening, take stock of your situation. Have you contributed to WordPress before? Put a plugin in the repo? If not, you probably ought to take a stab at a core patch or two to show the mentors that you're capable of working with the WordPress codebase. If you're not sure where to start, check out the advice on contributing to core/submitting patches.
  • Talk to potential mentors you might like to work with on the project. You can try emailing them, or grabbing them in IRC. Mentors will be in and out of irc.freenode.net #wordpress-gsoc (if you are not familiar with how to access IRC channels, go find out).
  • Post your draft proposal on your own WordPress-powered blog. Send the link to the wp-hackers list and ask people to leave comments on it.
  • Finally, go to the GSoC site and submit your formal application. Use our Application Template, and fill in all the requested information.
  • After you've applied, check on your application at the GSoC site once or twice a day. This is very important. WordPress mentors will leave you notes on your application if they need more information or have additional questions about your proposal that they need answered before making a decision. If they leave and note for you and you don't respond, it's not their job to track you down. There will be hundreds of applications, so making sure you stay on top of your application will help you compete for the spots we have to fill.
  • Wait. Bite your nails. See a movie. Google will announce the accepted students on their site.

Good luck!!!

See Also

GSoC2007, GSoC2008, GSoC2009, GSoC2010, GSoC2011, GSoC2012