Summer of Code
From Habari Project
Summer of Collaboration
While Habari was not chosen as a participating organisation for the Summer of Code, all the projects listed on this page are still available, or you can propose your own. You get fantastic mentors, a supportive community, and the opportunity to work on a great project. Check out the Habari Summer of Collaboration.
The Habari project is extremely excited about the possibility of participating in the 2008 Google Summer of Code. Based on the meritocracy model, the Habari project is always welcoming toward new developers, regardless of their level of skill. Several Habari committers have grown into their current role through their involvement with the Habari community, having started with little or no practical PHP experience!
One of the original goals for Habari was that new participants should have as low a barrier to entry as possible. To this end, all code contributions to Habari require inline PHPdoc documentation, so that no one need ever guess the purpose of any function. Similarly, Subversion commit messages should be meaningful, erring on the side of verbosity in favor of clarity whenever possible.
The Habari community is a vibrant one, with two active mailing lists (user and developer focused, respectively), and a frequently lively IRC channel (#habari on irc.freenode.net). Several real-world friendships have blossomed since the start of the Habari project, and the overall attitude of all the participants is one of respect, and casual fun. We are, after all, trying to scratch our own itches, rather than chase a profit.
One of the core philosophies of the Habari Community is that "Community is more important than Code." The concept that a great application requires the efforts of designers, documentation writers, testers, and users in addition to coders is fundamental to this project. To this end, students working with the Habari Community will be mentored not only in writing code, but in the successful interaction with other members of the Open Source community who may or may not write code themselves.
One significant difference between Habari and many other PHP projects is that Habari is written in object-oriented PHP5. Participation in Habari development gives GSoC students a tremendous opportunity to learn object-oriented programming with Habari's commitment to applying modern tools and techniques.
Habari is released under a modified Apache Software License 2.0 license, and all contributions to the core software must be similarly licensed. Third-party plugins not bundled or distributed with Habari are of course free to select any compatible license.
- Scott Merrill (skippy)
- Chris J. Davis (chrisjdavis)
- Owen Winkler (ringmaster)
- Matthias Bauer (moeffju)
- Sean T. Evans (morydd}
The ideas presented below are those suggested by current Habari developers and users. They are in no specific order, and this list should not be considered complete. Students are warmly encouraged to suggest their own ideas, based on what they think will best advance the craft of blogging or online publishing.
Habari Control Center
When originally planning the Habari framework, it was generally agreed that a single installation of the source code should be able to power multiple Habari sites via unique URLs. In addition, it was suggested that a "master" Habari installation might be able to control "child" installations, such that from a single administrative interface one could change settings on other blogs without having to go to each sub-site's administrative interface.
Such a mechanism would permit an administrator to tend to many blogs from a single location. One could activate plugins, change themes, manage users or perform other administrative tasks from the Habari Control Center, and have the tasks executed on one or more Habari blogs.
The communication mechanism for such a Control Center should work across unencrypted connections without risk of leaking user credentials. It should also prevent against reply attacks, injection attempts, and spoofing.
This project would allow a student to focus on achieving distributed control of multiple sites while maintaining the security of the sites and the the users of those sites. Additionally, the interaction between a user and the code would be called for, as Control Center would need to be easily navigated and consistent, while making it simple for the administrator to be aware of which sub-sites were being affected by any given commands.
This project is particularly well suited to a student wishing to learn more about large-site architecture and management.
Users should have a simple way to backup their Habari installation. This backup should include, at the minimum, the entirety of the database. Ideally, and optionally, it could include all currently active plugins and the currently selected theme. If one were really ambitious, it could include all plugins and themes.
This backup needs to be sensitive to the fact that personal information is most likely stored in the database. For example, it is imperative that the backup process not expose or make available information from the blog to other users of the physical host. Additionally, the backup process should be as resilient as possible across the variety of installation platforms supported by Habari. Finally, the backup process should require as few changes to the system configuration as possible. If directory permissions need to be changed, these should me minimized to as few changes as possible.
Keeping track of the evolution of an item in the Habari database would provide useful long-term analysis to some users, and opens up a variety of new workflows to bloggers and publishers.
Import / Export
It is often a tremendous challenge to migrate from one publishing tool to another. Many tools permit one to import from their prior tool, but very few provide any kind of export functionality. The Habari project believes strongly that your data is more important than the tool you use to publish it. To that end, the Habari project would like to initiate a cross-platform export format so that end users can move between publishing solutions with greater ease.
Such a format will obviously involve the participation and support of other publishing tools. Any candidate working on this project should feel encouraged to connect with other students / groups / products to engage them on this issue.
In addition to such a standard format, it would be beneficial if Habari could import content from current vintage tools. Importers for Drupal, Serendipity, Express Engine, Movable Type, et al. should all be produced. This could be a project tackled by a separate student; or someone working on a unified export format could begin their work by gaining familiarity with the database schemas of a variety of currently popular tools by working on importers.
The proliferation of Internet-connected mobile devices makes it a foregone conclusion that Habari should be fully-functional on as many of these mobile devices as possible. Many current Habari developers and users would like to be able to interact with their Habari blogs from their smartphones, PDAs, and ultra-portable PCs. Several of the Habari developers are watching the Google Android project with great interest.
One of the major shortcomings of the current state of blogging is that one's comments are stored outside of one's control. When you comment on someone else's blog, there is no guarantee that the comment will be published for public visibility, nor that it will be published unaltered. Additionally, one sometimes forgets on which blog one might have left a specific comment -- especially when commenting on a site one does not regularly visit. Finally, one's comments might disappear forever if the owner of the blog to which they are attached decides to take down her site (or fails to properly backup her site)!
CoComment is a third-party, browser-specific solution to this problem. The Habari project would like to integrate the functionality of CoComment into everyday blogging, so that the tool you use to blog handles the tracking of your comments throughout the blogosphere.
A brief description of the desired functionality:
- Alice comments on Bob's blog.
- When finished processing the comment, Bob's blog contacts Alice's blog and sends along the contents of Alice's comment.
- Bob's blog them redirects Alice to her own blog, where she is greeted with a screen to confirm that the comment she left on Bob's blog is displayed correctly.
- Alice is given the choice to approve or deny the storage of this comment within her Habari installation.
- Optionally, after processing Alice's decision, Alice's blog sends her back to where she started: namely Bob's blog.
In this way, Alice can keep a local copy of all of the comments she makes throughout the blogosphere.
The system needs to reasonably protect against abuse in the forms of spam and other unauthorized submission of comments. The system should perform autodiscovery of the remote endpoint to use when submitting the comment, based on the URL provided by the user when filling out the comment form. It needs to gracefully handle the situation where autodiscovery fails (ie: the commenter's own blog does not support this feature).
Additional Database Support
Habari employs PHP Data Objects (PDO) for database access. This allows the system to connect to different engines to maintain the data stored. Habari currently support MySQL and SQLite database engines, but would like to support additional engines, for example, Postgres, Oracle, or MSSQL.
An applicant could construct the database classes necessary to connect Habari to a new database engine. The applicant would also provide the schema to create the initial Habari database in that engine, and code the functions to successfully implement Habari's database interface methods, including a function that would upgrade the database structure between database structure changes from version to version.
Habari has an embryonic unit testing framework, and it is possible to construct tests for most of the Habari classes. An applicant interested in rigorous testing methodologies could gain valuable hands-on experience fully implementing unit tests for the Habari code, such that tests can be run automatically as part of preparing a release candidate, or indeed as part of a Subversion post-commit hook.
Security is a critical aspect of any Internet-accessible product. The Habari developers have made reasonable decisions with respect to the default security of any Habari installation, but much could be gained by a rigorous audit of the code, looking for specific attack vectors. As an open source project, the Habari code is available for scrutiny for malicious intent as well as beneficial. A student with an interest in application security, penetration testing, or similar issues could earn valuable real-world experience applying their skills to the Habari codebase.
Habari currently provides a simple search functionality for posts, returning date-ordered posts that match search criteria. However, web users are used to ranked search results, such as those provided by public web search engines, and Habari would benefit from the ability to rank search results. An applicant interested in search could implement post indexing and search. If a consistent interface was provided, this could be built upon to provide search for comments, and allow for various plugins, such as for tag suggestion, similar posts, and context sensitive taglines.
In the beginning of the project, we wanted to have an extensive, full-featured i18n/l10n framework. That fell along the wayside as the project grew, and it needs to get back up to speed now before the core becomes more complicated. There needs to be support for LTR and RTL languages, different charsets etc., which will lead to related changes in e.g. the theme and admin code. Some 'deliverables' would be a localized admin, a localized theme, a plugin, and language files for a few major languages, preferably not all of them Western.
March 5, 2008: Organization Application Submitted.