Summer of Code: WWW:Kontent - A Perl 6 CMS

acme on 2005-07-12T22:53:25

The Perl Foundation took part in Google's Summer of Code program and managed to get 8 projects funded. This is the fourth in a series of informal interviews finding out more information about these projects. Up now is Brent Royal-Gordon with "WWW:Kontent - A Perl 6 Content Management System".

Hi there! Tell us a bit about yourself, including age, where you are a student and what you are studying
I'm a nineteen-year-old Californian who has been working with Perl since about the second semester of high school. I've been watching the Perl 6 effort since shortly after the RFC deadline, and made some contributions to Parrot during my junior year of high school. Simultaneously, I've been doing a lot of HTML and CSS work, including a website for my mother, an author.

You've had a Google Summer of Code project funded. What will you be doing? How will you be doing this? What's the final product?
I'm writing an extremely flexible content management system in Perl 6. The idea is to take all the common parts of systems like the Everything Engine, MediaWiki, Slash, and so on, and write a base system that handles all of those tasks. Each page--actually, each revision of each page--is then given a "class" specifying the behavior it should have. For example, a class for a wiki page would allow anybody to edit it, while a class for a Perl Monks-style page would only allow its author to do so. The classes are actually Perl 6 roles, which are composed into the page objects at runtime--something Perl 5 could never do without some serious trickery. At the same time, the other parts of the system are built to be pluggable. One module, for example, will handle talking to whatever backing store--SQL database, DBM file, directory full of flat files, whatever--is being used; the administrator can easily switch between backing stores, and a carefully-designed page class might even bridge to another store a la Unix's mount(8) command. A set of "renderers" will be able to display pages in multiple formats, so that the same database entry could be displayed in HTML, PDF, or OpenDocument. The normal markup language for it will be a specialized language called Kolophon, but it's designed to handle other markup languages as well. Basically, I want to build a system you could use to run any kind of website, even if different sections have different behaviors or rules of operation. It's a system that can be a normal website, a wiki, a news site, a bunch of blogs, and a message board all at once, and which can work with any database you have the tuits to connect to it; it keeps a complete revision history and allows you to edit pages from anywhere. Even more basically, it's what the webmaster in me has spent five years wanting computers to do for me.

How did you get interested in this topic?
My early work with crappy, homegrown web templating systems kind of laid the groundwork. Since then, I've seen and experienced a few things that made me want to do this project: an attempt to design an open-contribution site that was just too hard to do right in Perl 5; a friend's site that will require four completely separate components (a wiki engine, a message board, blogging software, and a news system) and still have a few static pages; some experiments with Everything, Slash and MediaWiki; and of course lots of time spent examining Perl 6.

Where do you see your project going after this summer?
On the CPAN. ;^) My proposal to TPF purposefully excluded some of the harder but more compelling parts of the design, like the message board and image page types, from having to be finished before the deadline. There will be plenty to do after September 1. I hope Kontent will become fairly important. I'd like for this to be one of the first things people download when they get a brand-new copy of Perl 6.0.0. Of course, that's not very likely, but a hacker can dream, can't he? One thing I pretty much know will be helpful is the side effects on Perl 6 development. I've found a few bugs in Pugs so far, and I'm also compiling a list of "Perl 6 nits", little annoyances in the language. (Overall, though, I love the language so far; it's a dream to program in, because the construct you want is always there.)

Is there any way to track your progress over the next few months? Got a blog?
I have a personal blog on LiveJournal, but I'm mostly tracking my progress on my Use Perl journal.

Did you expect to get funded?
Not really. I tried to write the most compelling proposal I could, but with 9,000 applications it really seemed like a long shot.

Got a silly fact about yourself or the project?
Like many amateur webmasters who know Perl, I reinvented the "web templating system" wheel at least three times before I realized I should just use one of the much-better-designed systems on the CPAN.