Mzingi Theme Released

September 14, 2007 3:24pm 3 comments

Michael Bishop has released the mzingi theme for Habari. This is his first published theme for Habari, and it looks to be a fantastic start! According to Michael, mzingi means "foundation" in Swahili, which is very apt: this theme should provide a solid foundation from which others can extend for their own needs.

Michael's been an active participant in the #habari IRC channel, as well as the mailing lists, and has provided a lot of work spearheading the documentation effort. We're extremely lucky to have folks like Michael contributing to the Habari project, and I'm really looking forward to see what he offers next!

Ohio LinuxFest 2007

August 27, 2007 8:02am 2 comments

As summer draws to a close, it's time once again for the Ohio LinuxFest, the midwest's best free conference for GNU/Linux and open source enthusiasts. Now in its fifth year, OLF offers terrific presentations on a variety of subjects, a comfortable, casual atmosphere, and plenty of opportunity to meet other GNU/Linux users. Keynote speakers this year are Bradley Kuhn, former executive director of the Free Software Foundation, and Max Spevack, Fedora Project Leader and chair of the Fedora Project Board.

A great new addition to OLF this year is OLFU, a full day of tutorials and training on the Friday before the OLF conference. If you'd like some more formal training for GNU/Linux, or would like the opportunity for discounted professional training and certification from LPI or LOPSA, then OLFU is for you!

What started out as a small little conference for central Ohio GNU/Linux enthusiasts has grown to be one of the premier events in the midwest. This year Google is sponsoring the party after the conference. Drew Curtis of Fark will provide some entertainment before the final keynote. And I think we'll have a surprise or two -- though it's unlikely we'll have live penguins like we did in 2006.

I'll be running the registration desk again, so if you're attending you have no excuse not to say hi to me! I'll also probably spend a little time at the FreeGeek Columbus booth, as well as the Habari booth. Chris, Owen and Rich are all going to attend again; and Sean is coming down from Chicago! Chris is speaking at OLF this year, and I'm very excited to hear his presentation.

As always, admission to OLF is free. If you're going to be there, drop me a note ahead of time, or introduce yourself when you check in!

Habari at Blog Kazani

August 26, 2007 5:30pm

Hasan at Blog Kazani, a popular Turkish blog, conducted an interview with the Habari developers. They asked us some great questions, and I'm really pleased to read everyone's answers. We touch on the foundations of Habari, short- and long-term plans, and our opinions of blogging generally. It was a lot of fun to answer their questions, and I hope the Turkish blogging community takes some time to investigate Habari!

Habari Pingbacks and Undelete

August 25, 2007 4:30pm

After a bit of a summer lull, things are picking up again for Habari. One very important improvement is increased usage of our core API inside the install process. Previously, we had SQL INSERT statements inside our database schema files. These have almost all been removed, and replaced by Habari functions that perform the appropriate database interaction. This provides a consistent utilization of our core functionality, makes sure that the construction of the initial database is easy to understand by anyone reading the installhandler class, and helps simplify synchronicity between the schema definitions for all of our supported databases.

In the last couple of weeks, we've also finalized support for sending and receiving pingbacks, through the use of the new pingback plugin. This plugin uses our own XMLRPC library, which is made available under the Apache Software License. Our initial testing has worked well enough that we're now ready to start testing the plugin on live sites (like this one!) in order to discover any unexpected problems.

Another major improvement in Habari is initial support for undeleting posts. This was originally built into the core of the Habari codebase, but after some discussion we decided to move it out into a plugin. First, not everyone will want undelete functionality. And second, this is an excellent opportunity to demonstrate how plugins are constructed for future plugin developers: the undelete plugin isn't terribly complicated, and makes a good example of how to use our plugin API.

The undelete plugin leverages several important design decisions in Habari. From an early stage, we knew we wanted to be as flexible as possible when it comes to handling posts. One of the failings of other blogging solutions is that they know only about one or two kinds of content: posts and pages. Habari, on the other hand, has a flexible system for adding entirely new post content types, so that plugins can make and use content in ways we could never anticipate. In a similar vein, we wanted post statuses to be flexible, too. Instead of just a binary draft / published status, we've made the status system dynamic, so that plugins can register new post statuses. The undelete plugin registers a new post status of "deleted", and through the plugin API it interrupts the normal post deletion process to set the post's status to "deleted" rather than actually delete it from the database.

Currently, that's all the plugin does -- it does not yet provide an interface for restoring posts to their original status. That's in the works, though! We plan to develop a complete admin interface for reviewing and manipulating deleted content. This interface will be tied closely to improvements in our ACL system, so that administrators can delegate who can and cannot undelete posts. We also plan to extend undelete functionality to comments; and there's even been some discussion as to whether or not we can undelete user accounts.

Work on the undelete plugin and the pingback plugin has helped us refine our plugin API plans. We've adopted a very consistent naming convention for plugin hooks: class_method_extra. For example, the undelete plugin acts inside of the delete method of the post class, making sure that the post is not actually deleted, so it uses the post_delete_allow filter. This filter expects a boolean true or false value to determine whether to proceed with deleting the post. The undelete plugin returns a value of false, so the post is not actually deleted.

With the plugin API settling into a nice standard, I'm looking forward to working next on the ACL system, in order to support granular permissions on the things one can do inside of Habari.

Finally, we've added Andrew Da Silva to our project team! Andrew has been doing a bang-up job providing patches and monitoring the list of open issues. I'm extremely pleased to have someone with his enthusiasm on the team, and I'm really looking forward to working with him!

Habari 0.2

August 3, 2007 9:27pm

I just finished tagging version 0.2 of Habari, labeled DR for "Developer Review". It's been almost four months to the day since the release of version 0.1, and we've made a lot of progress on the code.

Major features include:

  • The beginnings of a formal user manual, available at /manual. This is currently introductory, end-user documentation. Additional documentation will be added as we go. We feel strongly that there should be no reason for you to visit the Habari Project site just to read the manual for the software you've already downloaded.
  • Dynamic content types. Habari creates "entry" and "page" content types during the installation process. Plugins will be able to create new content types, greatly expanding how Habari may be used.
  • Event logging: Habari has a robust logging mechanism, and logs important events as they occur. This provides a valuable troubleshooting and auditing tool. Plugins can easily make use of this feature. We don't currently have a way to view log entries from within Habari, but that's high on the priority list.
  • A Stack class, useful for building stacks of things for output. For example, this is used to build a collection of CSS or Javascript files to include in the portion of the page's output, allowing for controlled collections of resources to be delivered as needed.
  • A FormUI class, for building user interface control elements. This will be invaluable to plugin authors, in order to build plugin control pages without having to write tons of HTML.
  • Post slugs can now be edited.
  • Pluggable admin menus.
  • A robust system to test plugins before activating them, in order to prevent a broken plugin from rendering your site unaccessible.
  • Lots and lots more!

Future additions include a comprehensive user permission system, enhanced tag functionality, more default themes (and ThemeEngines!), and more. If you have any suggestions, join the mailing list and let us know! Remember, community is one of the most important aspects of the Habari development process: we very much want to include as many good ideas from as many people as we possibly can! Share your ideas, discuss with us the implementation details, help us weigh the pros and cons, and be part of the development process!

The Habari codebase is sensible, and (mostly) well planned. Class names are meaningful; and classes encapsulate specific functionality. It's fairly easy to read through the Habari code to find out what is happening. Comments are required for all functions, so you should never have to ask yourself "what is the purpose of this function?"

Habari is still very rough around the edges, so it's not recommended for every day use unless you're willing to help identify problems, and test possible fixes. I've been running it here on skippy.net since 0.1, and I admit that I would find it hard to switch to anything else. It's fast, unobtrusive, and functional for my needs. I'm really looking forward to the future of Habari!