- By Brian Aker, Slashdot Senior Developer -
As of late I have had a couple of recent projects floating around in my
required me to create Web sites. For me, this typically means that I
drag out Slash and put my ideas to
work. The thing is, several of the ideas I have been thinking about just
don't work well with Slash, and to be honest, I am bored with it at the
moment, so I have been exploring other online content management software.
The two content management engines that I have been most interested in
lately are the engines used for Everything2 and
LiveJournal. The E2 and LJ engines
are both Open Source and both have a good record of being security
conscious. I also respect the developers who own the projects, and for
me that makes a difference when I choose Open Source projects to use.
The two engines have been designed around similar ideas. They both allow
multiple users to create their own content and manage it from the Web.
The major difference between them is that LJ focuses content creation
and ownership on the individual creator of the information, while E2
concentrates information into a collective resource.
I started out by downloading the code for both and getting their
supporting software installed. For my install I used Red Hat 7.2, which
had the versions of MySQL, Apache, and Perl that I needed (however,
there are problems with Red Hat's MySQL, so if you try this yourself, you
should get your RPMs directly from MySQL's site). I first ran into
problems, though, with the Perl modules that both needed. Both engines
used modules that had install problems. This is a common problem, and
one that I have seen with Slash. CPAN is a wonderful collection of Perl
modules, but a number of the modules in it are of poor quality. When
systems rely on it for installs you can frequently assume that there
will be some work in getting what you need installed. LJ had perhaps a
bit more trouble than E2 because of a need for the GD library, but both
could use a nice Bundle that points out which versions of modules should
be used. For LJ I ended up creating my own Bundle because I wanted to
document exactly what it took to get it installed.
The E2 engine itself was quite simple to install. It has a script that
asks you a few questions, then it installs itself based on your answers.
It also has a nice "Quick Install" instruction document which helped
make my install trouble-free. I had originally obtained an older copy of
E2 by accident and tried to install it, but all I will say about this is
that the experience made me very aware of how much E2's install process
has improved over time. That aside, I still had a few minor problems
with the new version. E2 didn't detect the document root for my web
server correctly, and there were two minor errors in the configure file
that it created for Apache. I resolved both easily, and mailed notes
about the problems to E2's author. One nice thing which it did, that the
LJ system later did not do, was install itself in "/usr/local."
Unfortunately both systems assume that are the only system running on
my Web server, which means that anyone who is using both systems at the
same time will need to tweak their installs accordingly.
LJ was a bit more of a task to install than E2. Its tarball dumped its
contents directly and did not store it in a subdirectory. The install
script was a bit on the primitive side, so I had to hand-place and edit
some Apache configure files and an LJ configure file. The directions in
the LJ configure file were straightforward, but I did find it annoying
that its configure file assumed I would have a "www" in the front of my site name.
Its directions were also a bit haphazard, and it could use a nice set of
"Quick Install" instructions. I also found that the install script will
fail with an inaccurate response to the LJHOME directory variable if you
do not create the location for LJ to install itself before the process
begins. You will also need to manually update the permissions on the
directories. Additionally, LJ wants to install itself as a user in your
home directory. One thing I discovered once I had the system installed
was the script "bin/checkconfig.pl," which actually pointed out a couple
of problems in my install to me. In the end, though, it seemed as though
some of the settings that should have been set from LJ's configure file,
like site name, did not always work once I had the system installed. I
suspect that there are places where certain configuration variables have
been hard coded in the scripts that run the engine.
Both systems have on-line documentation. E2's is very easy to figure out from its interface for simple tasks. Its
security system is very Unix-like, and permissions for documents, which
it calls "nodes," are quite understandable. If you want to do something
beyond document creation, though, the language is a bit complex and can
be hard to follow. This is where you will definitely need to make sure
you have read the online documents for the system. Even then, you still
may find yourself scratching your head about the inheritancy system that
is used for some of its subsystems.
LJ's documentation needs work. In places it is not complete, and it does not walk you
through simple changes that you might want to make for your site. It
does go into BML, a markup
language designed for LJ sites. BML is a very simple markup language
that gives you the ability to script how pages look. E2's additions to
HTML are very small, which limits you to either using basic HTML for
your designs or resorting to Perl, while LJ's does not suffer from this
because of BML. BML is quite simple, and it should be trivial for a Web
designer to pick up. On this same note, there is no reason why any Perl
programmer should feel too constrained by BML. My only complaint about
using BML with the LJ engine goes back to the fact that not enough
information is provided out of the box on how to customize your LJ site.
Also, on an E2 site everything can be edited from the web, while for LJ
you will need to make site changes through files on disk.
As far as design goes, both systems have a limited concept of "plug-ins"
that will allow you to extend them. E2 has several plug-ins at this
point, while LJ is limited to just a couple. When looking at my SQL
traffic I noticed that E2 generates a high number of SQL requests per
page (nearly four times as many as LJ), so its database usage is pretty
harsh. It also does frequent "SELECT *" calls so it drags quite a bit of
data out of the database for each request. LJ is much more conservative
when it comes to database usage and even allows you to spread a LJ site
out into a cluster. Seeing how LJ's main site does around 17 million
page views a day, compared to the 100K page views on the largest E2 site,
it is not surprising that it has been optimized more for speed at this
point than E2. Since E2 uses MySQL as its database back end (for that
matter so does LJ) it will benefit from the latest 4.X versions of
MySQL. E2 should pick up a nice performance boost from the 4.x query
cache system, which may make some of my worry about the number of SQL
queries it does per page go away.
Thus far I have talked about how each engine looks from the point of
view of someone administering a site based on each engine. Users of an
E2 site may find that its complexity makes it a system that a geek would
love, though any user should be able to understand most of the common
uses of the engine. LJ's system, on the other hand, is very trivial for
any user to use, and has been designed so that even your grandmother
shouldn't have an issue with using it. Even the more advanced options,
like changing the look and feel of document pages, are within the grasp
of most users. Entering a new document is trivial, and clients exist for
all major platforms so there is no reason anyone who uses the site more
than a few times a year would even need to use the document editor
built into the site. Ease of use can be summed up by saying that E2
feels as though it is very much geared for a developer, while LJ has a
simple feel that anyone should be able to understand.
After playing with both systems I came out liking both of them. I found
E2 easier to setup for my needs, but I was really impressed with the
design of LJ. LJ is a nice engine for a large site and has a very
flexible architecture. It lacks good documentation and a nice installer
system, though, both of which E2 has. The one feature LJ lacked that I
needed was a way to search through documents that are stored in the
system. E2 has a primitive but effective search engine, so for me it was
the clear winner. I did consider adding a search engine to the LJ engine
to overcome this, and I may do this at some point in the future for
other projects. One of the great things about Open Source, after all, is
that if I am missing a feature like this I can just add it myself.
There are many choices for content management systems out there at this
point. If you find that you need one I can easily recommend both of
these systems. Both have the sort of history that should make you feel
comfortable making use of them, and both have active communities around
them, so help with either one should be easy to find.