Contributing to Gallery: the Google Summer of Code 2005
Here are some of our ideas about what you can work on for the Google Summer of Code. Pick one or two of the tasks below and talk to us about it and we'll help you make a proposal to Google. Since we're getting a flood of people who are interested in working on tasks, you should be aware of a few things:
We're going to be unable to answer each and every request for more information about a task. Try as we might, there are just not enough hours in the day. So to arm yourself to make a winning proposal, you should have a good knowledge of PHP and web based application development. You should have a copy of Gallery 2 installed and you should have played with it enough to get an idea of the feature set. You should spend some time reading the Gallery 2 development documents. You should at least crack open the code and take a look at what's inside so that you can get an idea of what G2 modules, layouts and themes are. You're going to need to know this stuff in order to write a proposal that we (and Google) are willing to accept. You should also be prepared to write good documentation for your work, write extensive unit tests, follow our strict code style and interact with us on our IRC channel.
We absolutely want you to submit a proposal! We'd like you to get funded by Google -- this is good for you and it's good for us, and we'd love to have you working on the code base. We will be happy to answer any specific questions you have about the application vision, design and implementation. The more specific the question the better.
After the deadline, Google will sort through all the resumes and discard anything that they deem to be of too low quality to pass on. They'll pass the rest on to us, and we'll choose as many of the best proposals as we can effectively mentor. We don't expect to see any until after the deadline has passed. Once we get the applications, we'll be selecting for quality. The more thoroughly that you demonstrate an understanding of G2 and the work entailed by your proposal, the greater the chance that we'll accept it. For example, a proposal that merely repeats back what we already have on the ideas page is not good indication that you actually understand the work that's required. The quality of your written English is also very important. We're an English speaking team and will expect you to be able to write good code, comments, documentation, email messages and irc chat in English. Take your time to dot your i's and cross your t's and use the correct terminology because you can be sure that you're competing against others who will do so.
If you want to get your proposal accepted, the best technique is to download G2 and start hacking on it and trying to implement the idea. If you spend an hour or two on the actual code itself, I suspect that you'll be able to write a much more thorough proposal (with supporting design documents, mockups etc) which in turn will be much easier for us
to accept. A couple of hours now can lock in your $4500 stipend this summer.
Summer of Code Ideas
Hopefully after you've armed yourself with the information above, the following task synopses will provided you with enough information for you to figure out what is really involved in drawing it to completion.
- Create a Flash layout for Gallery 2
- Deliverable: New flash driven G2 layout that has all the functionality of the Matrix layout, but uses Flash instead of HTML to do navigation and album/photo rendering.
- Create a Flickr Style Slideshow Module
- The current slideshow displays photos quite nicely. Flickr takes slideshows several steps further with a Flash-based slideshow that provides thumbnail navigation, fade transitions between images, and slideshow controllers that minimizes smoothly. The addition of admin tools to rotate and manipulate images when viewed in the slideshow would be an incredible addition (ala iPhoto).
- Deliverable: New G2 module with a full featured flash slideshow
- Create an AJAX Powered Layout
- Create a layout that builds on G2's current hybrid layout that provides dynamic controllers that combine thumbnail, sized image, and slideshow components into a single layout. The final product should have dynamic scaling and transitions that appear to be Flash driven, but aren't! See maps.google.com and flickr slideshow (among others) for inspiration.
- Deliverable New G2 layout with all the functionality of the Matrix layout, but using AJAX methodologies to create an intuitive user experience.
- Enhance Gallery 2 remote protocol functionality
- We've got an experimental XMLRPC module that allows remote access to the extensive Gallery API under development. Currently this module allows authentication as well as browsing/adding/editing/deleting items. Join the team and help us to drive this module to completion. This module will become the conduit that other applications like Picasa, iPhoto, etc will use to communicate with Gallery 2.
- Deliverable: The current module is limited to basic interaction with Gallery 2. Add functionality to the existing XMLRPC module to perform administrative tasks such as managing users, modules, permissions, etc. This would require a very detailed coverage of the full Gallery 2 API and should allow an XMLRPC user to do anything available to someone using the web interface.
- Deliverable: The current module doesn't work well with the G2 module system. It is all in one place and is not very flexible as other modules are added to the system. If the XMLRPC module exposes functionality of some other module and that other module is deactivated, bad things can happen. Enhance the existing XMLRPC module to allow other modules to expose their functionality through the API only when they are active (and perhaps only when they are activated for remote access in the configuration of the XMLRPC module). Write remote functions that use this for several modules such as comments, quotas, mimetypes, or any others.
- Deliverable: New G2 module that provides a secure SOAP/REST/? front end to the !GalleryCoreApi, utilizing unique features of the standard (such as transactions in SOAP). XMLRPC is great, but other standards allow for things that XMLRPC doesn't. This includes some mobile devices that may only "speak" SOAP or REST. Write a new module that exposes the same functionality as the existing module, but in a different way targeted to how the other standard is designed.
- Integrate Gallery 2 with an ecommerce engine (like osCommerce)
- Now that your photos are on the web, how would you like to start selling some of them and make some money? Gallery 2 has a shopping cart, but if you embed it inside an eCommerce CMS like osCommerce you can take advantage of all of the capabilities of a full commerce engine.
- Deliverable: Integration wrapper written for osCommerce that provides tight integration between the osCommerce APIs and the G2 APIs so that G2 can be used seamlessly as the media storage subsystem for osCommerce.
- Create an Integrations Manager for Gallery 2
- Gallery 2 is designed to be integrated into other applications. We've made great strides in integrating it into Xaraya, Mambo, !WordPress, Drupal, PHP-Nuke and other applications. All of these integrations require a certain amount of fiddling around with technical packages. Creating a single bridging application that enables integration with remote applications using a point and click interface would ease integrations and drive user acceptance.
- Deliverable: Gallery2 module (or standalone application) that provides an API for existing CMS bridges and provides a web based GUI that lets site admins perform integration tasks (install a bridge, synchronize users, groups etc) quickly and easily. For more information see the trask tracker Integrations Manager
- Implement duplicate image detection
- Design and implement an algorithm that allows Gallery 2 to efficiently detect duplicate images inside an arbitrarily large collection, then turn them into links of each other so that we don't waste disk space.
- Deliverable: New G2 module that scans existing images for duplication and allows the user to choose which ones should be converted into G2 linked items.
- Gallery 2 supports album and item keywords, IPTC and EXIF metadata. Wouldn't it be cool if it had dynamic albums based on keywords? So if you want to find all the photos about "family", you click a link and it creates an album just for you.
- Deliverable: New G2 module that lets you create dynamic albums based on keywords and save them for later. This will require additional changes in the core framework; it can't be done solely as a separate module.
- Integrate Gallery 2 with Picasa2
- Picasa is an amazing desktop photo management application. Gallery 2 is an amazing web based photo publication application. You want both. Why not make them talk to each other so you can drag and drop from Picasa right into your Gallery 2?
- Deliverable: New Picasa2 plugin that can communicate with Gallery 2 via the Gallery Remote API or the XMLRPC module (see above task). It should take advantage of as much of the capabilities of the Gallery Remote/XMLRPC APIs as the Picasa2 plugin interface will allow.
- Create an RSS feed module for Gallery 2
- Your friends want to know what you just published! Gallery 2 has tons of information that it can share about your photo collection. Create a G2 module that lets your friends subscribe to a customized feed of the exact information that they wish to see.
- Deliverable: New G2 module that provides an interface which allows users to choose what types of G2 data they're interested in (new albums, popular photos, latest comments, all of the above) and subscribe to that feed.
- A much-used Gallery 1 feature that has so far gone unimplemented in Gallery 2. As an enhancement to the core module, bharat has had the beginnings of some ideas on how to implement this in G2, including a temporary-url-based permissions grant system. This task could easily morph into password-protected albums which has been another heavily requested feature.
- Deliverable: Extension to the core module to allow temporary/session-based permissions grants by visiting a UI-invisible URL
- Right now G2 is very large because we ship all of the modules with the base install. However, we've got a plan for a framework that will let you talk to our master webserver, find out what packages are available and let you download and install them. This will let us ship a much smaller version of G2 and let people download only the modules that they want to use!
- Deliverable: Modifications to the core module that allow G2 to work with modules in the g2data directory, a simple, portable and reliable packaging system for modules. A UI that allows users to browse a package registry, see what's available, download, verify and unpack the module. A UI that allows users to check to see if their modules are up to date.
- There are tons of other things you could play with. Get ideas from:
And let us know!