Summer of Code 2008: Ideas
Contributing to Gallery: the 2008 Google Summer of Code
The Gallery project is pleased to participate in the 2008 Google Summer of Code.
Here are some of our ideas about what you can work on. 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 understanding G2 modules and themes. 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 (#gallery on irc.freenode.net).
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 (April 7, 2008), Google will give us the applications 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.
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 your own idea!
There are tons of things you could play with. Get ideas from:
- Our SFVote page lists Feature Requests by the number of votes each has received on our website. This list is an excellent place to look for ideas.
- Any feature request marked with a [G2] from the Feature Requests Tracker
- The Gallery 2.0 Task List
And let us know!
Gallery 1 offers a mirroring function that could be expanded for Gallery 2. The advanced mirroring would mean Gallery 2 would provide mirroring and load balancing, with some flexibility.
The user would configure 1 or more "alternate" image locations (currently called mirrors). He would also have the option of considering the primary in the list or ignoring it (ie, ignore if on DSL, use if hosted in a real environment).
On setups where the configuration has more than 2 "alternates" (including if they primary site is considered viable) a drop-down list on the main site would be available and have the option of all, mirror 1 and mirror 2. All would be load balanced, gallery pulls every Nth image from one mirror vs. another. Specifying one or the other mirror would pull from that mirror.
There are many benefits to this. Anyone with more than one "alternate" OR one alternate and a viable primary site can benefit from load balancing AND at the same time, possibly provide two locations for the user to pull images from. This would be especially useful if the user had alternate images on a server in europe, asia or somewhere far away from his main server. Then, any visitor finding images loading slow can choose to use one closer to him/her.
The admin should be able to allow alternates to even be picked (some may want to force load balanced) and should also be allowed to pick the default (load balanced "all" or one of the specified mirrors).
Deliverable: A G2 module that implements advanced mirroring
Enable Gallery 2 to act as a photoblog
Gallery 2 currently lacks some features that could turn any Gallery 2 powered site into a full photoblog package. The ability for site admins to add static content like photographer profiles, set future publish dates for photos and albums, notify subscribed members of changes and other similar task are not currently available.
Deliverable: Several small modules to enable new photoblog specific features, including (but not limited to) a small CMS module, future posting and subscriber notification.
Merge the Cart and the Checkout Module to Create a Better E-Commerce Solution
Most e-commerce features of Gallery are either based on the cart module or on the checkout module. The latter is a very popular user-contributed module with many ecommerce plugins while the former is an official module with many print service fulfillment plugins.
Obviously, there are many redundancies between the two modules and they basically serve the same purpose. In the interest of the Gallery community, these two modules should be merged into a single module to form a unified and more reliable base for ecommerce solutions based on Gallery.
Deliverable: Merge the checkout and cart module into a single powerful and configurable module and ideally convert the existing cart and checkout plugins (paypal, shutterfly, …) to work with the new interface.
Add Foreign Keys to Gallery's Database Schema
The G2 database schema lacks foreign keys to enforce referential integrity. The challenge is to add foreign keys and still keep the methods of the storage abstraction layer to create, update and delete Gallery entities working.
See task: [G2] Add Foreign Keys to the DB to improve referential integrity.
Deliverable: Changes to the Gallery 2 Core module / framework to declare foreign keys in the DB abstraction (XML based database schema description), to update the DDL generator for all targeted databases and to update GalleryCoreApi and GalleryStorage methods and their tests to keep them working with the new foreign key dependencies.
Create a Framework for Load, Performance and Scalability Testing
When considering major architectural changes and for quality assurance, we need means to ensure that there are no performance regressions and to quantify performance improvements.
The goal of this task is to develop ideas and test cases to measure Load, Performance and Scalability. Determine how to measure the impact on performance / system health with varying numbers of users, items, albums, permissions, requests per second, etc. And how to automate these tests.
Deliverable: A methodology for load, performance and scalability testing and tools or a framework to execute these tests.
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 task tracker Integrations Manager