The Traditional Method
For years, I've been developing commercial ASP and PHP web applications.
A web application is more than a website, it's the programming behind the website
that allows you to post news without diving into the HTML code, add photos to an
image gallery without creating thumbnails, etc - a good example is Everything2;
it's coded using Perl, not just HTML. Developing web applications takes a
significant amount of time. First you need to come up with an idea of what you
want - or perhaps your client will give you a specification. If you're ambitious,
like me, you'll need to realize when enough is enough and limit the amount of work
to something you can actually achieve. If you're not working in a team, and you're
lucky enough to have a girlfriend or wife (or boyfriend or husband!), then you
simply may not have the spare time to bang out serious chunks of code.
Traditionally, the next phase is design and development. This involves
gathering your ideas together and implementing them. If you're reading this, then
chances are you've built websites before so you'll try to reuse your previous code
to save some time. You still have to glue it all together and complete the major
sections of the site. Fine, maybe you can do all that pretty quickly. But what
happens after you've been using the site for a couple of weeks? You've started to
get some hits and you need to add some admin functionality you didn't see a need
for. You need to add your best friend to the site administration but - oops! - you
didn't have time to get user permissions in there. No problem, you wrote the code,
you'll just write some more.
Trust me - do this enough times, you'll get bored of it.
Another Way
Over the past few months, I've been looking at some alternative ways to build
websites. If you've not seen Drupal, DotNetNuke, MovableType (requires licensing), Wiki, PHP-Nuke or SnipSnap, Rainbow Portal, you've probably at least heard of
them. They're web applications loosely based around blog concepts (kinda like E2 day logs)
which you install on your own server and configure as you see fit. They all make
use of skins so you can tailor them to your individual look and feel. Each of the
systems have their pros and cons and each have slightly different functionality
from the next. Rather than call them "blog" sites, I prefer "community" sites as
they're purpose is very community orientated. Common functionality includes News,
Forums, Comments, Skins, Polls, Content Management System and User Admin. Each
particular system adds functionality in different flavours.
Interestingly, most of them are PHP/Perl based usually with a MySQL database (MSSQL support is provided by an add-on to
most of the systems) and therefore suitable for personal websites. A year ago I would've scoffed at PHP/MySQL (MySQL v5 has
stored procedures and, "yes, there is a GUI for MySQL like Microsoft SQL Server Enterprise Manager") but having tried it, I've been very impressed (with the exception of
PHP-Nuke - I thought it was pretty nasty - have you looked at the "HTML" it kicks out?!).
Open source
Something else all these types of systems have in common is they're open source to some degree.
Hundreds or possibly thousands of people working on your web application 24/7 for
free can't be a bad thing. There are even designers and developers creating funky
new skins and plug-in modules to extend the functionality of your chosen system.
Wherever possible I've made donations to the authors/groups for their work as a
great big "thank you" for letting me focus more on what a site should be (Content Is King) and less about how it works.
Losing control
You elite coders out there will be shaking your heads at how I can "let go" of
so much control of a site. You shouldn't. So many people develop, test, and
enhance the system you can be confident that it's works well. And if it doesn't,
why not put some minimal effort into customizing it? It's open source afterall -
dive right in! And when you're done, add it to the CVS tree and let other people
benefit. Everyone wins. If the system you choose doesn't come with some
out-of-the-box functionality that you need, there are plenty of plug-ins and hacks
that will probably do what you're after. In the unlikely event there isn't,
remember this is open source - you can make your own plug-in, it's not
difficult.
Further reading
Drupal (www.drupal.org)
DotNetNuke (www.dotnetnuke.com)
Wiki (www.wiki.org)
TikiWiki (www.tikiwiki.org)
MovableType (www.movabletype.org)
PHP-Nuke (phpnuke.org)
plone.org untested
SnipSnap (snipsnap.org)
Blogger (www.blogger.com)
Rainbow Portal (www.rainbowportal.net)
PHP (www.php.net)
MySQL (www.mysql.com)
EMS MySQL Manager
(ems-hitech.com/mymanager/) - MySQL GUI
NaviCat (www.navicat.com) - MySQL GUI
Microsoft SQL Server
(www.microsoft.com/sql/) - MSSQL
Content Is King
(www.microsoft.com/billgates/columns/1996essay/essay960103.asp)
Content Is NOT
King (www.firstmonday.dk/issues/issue6_2/odlyzko/)
Thanks to Damodred, andersa, in10se, ponder, Starrynight, NinjaPenguin and others for their contributions to this node.