GoogleSummerOfCode2008/Ideas

Google Summer of Code 2008: Ideas

(Stuff for Agavi 1.0 or 1.1 that a student could implement goes here. Only code, no documentation please.)

Students interested in participating in these projects should have, in general, a very strong grasp of PHP as well as object-oriented concepts and a knowledge of common design patterns (e.g., factories, model-view-controller approach), although this is not strictly necessary. We're looking for bright, insightful students who are able to quickly catch on to new concepts as well as apply their own experiences and knowledge to the task at hand. A desire to learn in addition to simply code is a necessity.

What is an "Ideas" list?

An "Ideas" list should be a list of suggested student projects. This list is meant to introduce contributors to your project's needs and to provide inspiration to would-be student applicants. It is useful to classify each idea as specifically as possible, e.g. "must know Python" or "easier project; good for a student with more limited experience with C++." If your organization plans to provide an application template, it would be good to include it on your Ideas list.

Keep in mind that your Ideas list should be a starting point for student applications; we've heard from past mentoring organization participants that some of their best student projects are those that greatly expanded on a proposed idea or were blue-sky proposals not mentioned on the Ideas list at all.

Current ideas

Agavi application for storing user-contributed libraries

  • Difficulty: Easy
  • Requirements:
    • Basic knowledge of object-oriented programming
    • Experience with PHP
    • Understanding of the functionality of a user-centric community
  • Description: This is another excellent introductory-level project. A student interested in learning about or working with the inner workings of a MVC or ORM framework without directly modifying the core would benefit greatly from this idea, which involves creating a complete Web application for other Agavi users to contribute Agavi-compatible libraries and modules. The application will involve a user management system with role-based permissions, a method for uploading created libraries, an auditing process (such as voting), and other basic community features. Could, for instance, use CouchDB as the database to allow transparent versioning. Should not be a fully-blown SourceForge?, of course, but rather a repository for smaller components.
  • See also:

Scaffolding module (with runtime inspection of Propel and Doctrine, not with generators)

  • Difficulty: Relatively easy
  • Requirements:
    • Knowledge of PHP
    • At least basic understanding of object-oriented programming
  • Description: This will require knowledge of how object-relational mappers function, both active record-style and generator-style (like Apache Torque). The student will build an Agavi module that can execute CRUD operations using a PHP ORM of choice. This project is less complex than the others and requires little or no core modifications to Agavi; a student interested in exploring MVC or ORM frameworks with no prior experience might consider this idea, as it would serve as an excellent introduction to either.
  • See also:

Storage subsystem

  • Difficulty: Medium
  • Requirements:
    • Knowledge of object-oriented programming in PHP
    • Ability to coalesce existing functionality (i.e., backwards compatibility)
    • Knowledge of XML parsing is a plus
    • Knowledge of caching/database systems is a plus
  • Description: This is one of the simpler projects and a good part of it is already planned (although open to changes, of course). Knowledge of existing storage systems (such as cache systems and databases) is a big plus, but not required. The student will be replacing a current singular approach to a storage interface (which is typically used as a session handler) with a much more complex system that is capable of managing many interfaces at once. Check out the ticket and the wiki entry for more information.
  • See also:

Agavi component interface

  • Difficulty: Medium-Hard
  • Requirements:
    • Knowledge of object-oriented design
    • Knowledge of general framework design
    • A creative mind
  • Description: This project involves creating a method for packaging independent third-party libraries that are designed to work with Agavi and require hooks into a running Agavi application. Applications should equally be able to interact with the installed library. This project is best suited for a student familiar with object-oriented design and general framework design. There is a great deal of creativity involved in this idea, as the implementation is completely open at the moment and no constraints have been placed on how the libraries should behave. The student will be responsible for designing a system that is flexible, interoperable, and usable.

Brand new project management system (that doesn't really suck)

  • Difficulty: Hard
  • Requirements:
    • Knowledge of existing build systems
    • Knowledge of creating applications that interact well (user to application and application to application)
    • A creative mind to get past existing problems with noted systems
  • Description: This will require a pretty thorough understanding of how existing systems work (like autoconf and ant, although not those two specifically). The student will be tasked with implementing a system for configuring, building, and maintaining projects. This system will have API hooks for interoperability and a basic console interface initially. The system will need to be quite extensible and generic to the point that it could completely replace a build system written using autoconf and automake. This is a challenging project but also potentially quite fun.
  • See also:

Port i18n subsystem to latest Unicode CLDR

  • Difficulty: Hard
  • Requirements:
    • Knowledge of object-oriented programming in PHP
    • Knowledge of design patterns, including MVC
    • Good understanding of software i18n
    • Understanding of CLDR and LDML
  • Description: Right now, we're using CLDR 1.4 data. CLDR 1.5 has changed structures in some aspects, and probably will require certain changes to AgaviTranslationManager, among others. Also, there is the possibility that corner cases of the LDML specification are not yet implemented or not implemented correctly. CLDR 1.6 is scheduled for a summer release, so it might be worth considering going straight for that one instead. Unfortunately, CLDR and LDML have no proper change logs, so it's difficult to spot changes across versions.
  • See also:

Brilliant unit testing system for Agavi's core and Agavi applications

  • Difficulty: Very hard
  • Requirements:
    • Knowledge of object-oriented programming in PHP
    • Knowledge of design patterns, including MVC
    • Prior knowledge of unit testing
  • Description: Agavi has a fairly unique structure. This will require a lot of designing and planning; this idea should be considered one of the most advanced and previous experience with design patterns is a necessity (if only because of time constraints). The student will create a unit testing interface (which can be based on existing tools or not) that can be applied to both Agavi projects (that means every user-created class!) as well as the Agavi libraries. Some work has already been done in this area in trunk for Agavi 1.0, based on PHPUnit 4's isolated test execution feature.
  • See also: