Summer of Code 2007: Ideas
Contributing to Gallery: the 2007 Google Summer of Code
The Gallery project is pleased to participate in the 2007 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 (March 27, 2007), 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!
Add full-text search capabilities into Gallery2
When you search for a picture based on title, keywords, or even comments, gallery has to search among all the metadata, looking through several database tables. To greatly improve performance of search (including generation of the famous keyword albums), one could implement full-text search functions into Gallery2.
This exciting task should include optimized low level database schema changes as well as adjustments of the search API. Keep in mind: performance matters.
More info on this task here.
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.
EXIF & IPTC Jpeg information edit/Search
Gallery 2's EXIF module currently handles embedded EXIF and IPTC data in jpeg and tiff images. Its current functionality includes extracting description, keyword and the timestamp from the embedded data and copying this data to the respective G2 item attributes; offering a block to show EXIF / IPTC data on photo pages; and a maintenance task to re-extract / capture the timestamp from the EXIF / IPTC data into the G2 item property
There are several key features that are missing from the EXIF module including storing the EXIF/IPTC data in the database instead of extracting it on each page load; writing EXIF/IPTC data - currently we have read-only access to the data; and searching EXIF/IPTC data. For more information see: Notes on exif module development.
Deliverable: An improved EXIF module for G2 that implements searching and editing of EXIF/IPTC data.
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 checout 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.
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
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).
Suggested technologies / alternatives: XHTML AJAX / OpenLaszlo / Adobe Flex.
Deliverable: New G2 module with a full featured flash slideshow
Add Boolean Search Features to Gallery's Search Module
The goal of this task is to add boolean search to Gallery's search module and its search interface enabling Google-like search queries like “holidays -England” to find all items that match “holidays” but not “England.”
Explore how boolean search can be implemented on top of Gallery's database abstraction layer with or without. Prior work includes: AND-search patch that needs some refactoring.
Deliverable: Changes to the search module, its user-interface and to the modules that implement the search interface to enable boolean search.
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 trask tracker Integrations Manager
Create a SQLite backend
Gallery 2 currently works with a variety of SQL backends (e.g. MySQL, PostgreSQL, Oracle, DB2). SQLite offers fast, SQL access to a flatfile database and can be easier to configure than a traditional SQL database server.
Deliverable: A SQLite backend for Gallery 2 that passes all 2200+ unit tests.
Allow Gallery 2 to work with PHP Safe Mode on
Gallery 2 is a large framework that takes advantage of many aspects of PHP that are not available with Safe Mode enabled. This is an oft requested feature which would require considerable amount of investigation and tweaks to the core framework. But if we could figure out how to address the various issues related to safe mode it would make many users very happy.
Deliverable: Either changes to the Gallery 2 Core module and appropriate modules to allow Gallery 2 to function properly with PHP Safe Mode On, or a detailed report explaining why this is not possible.
Gallery 2 does support captcha protection for comments, but could use better anti-spam solutions.
Deliverable: Create a module that allows for better spam protection, and possibly even integration into third party solutions like Akismet.